Changeset 14219
- Timestamp:
- 2020-12-18T18:52:57+01:00 (3 years ago)
- Location:
- NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src
- Files:
-
- 184 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/ABL/ablrst.F90
r13286 r14219 105 105 ! ------------------ 106 106 ! ! calendar control 107 CALL iom_rstput( iter, nitrst, numraw, 'nn_fsbc', REAL( nn_fsbc, wp ) ) ! time-step108 CALL iom_rstput( iter, nitrst, numraw, 'kt_abl' , REAL( iter , wp ) ) ! date107 CALL iom_rstput( iter, nitrst, numraw, 'nn_fsbc', REAL( nn_fsbc, dp ) ) ! time-step 108 CALL iom_rstput( iter, nitrst, numraw, 'kt_abl' , REAL( iter , dp ) ) ! date 109 109 CALL iom_delay_rst( 'WRITE', 'ABL', numraw ) ! save only abl delayed global communication variables 110 110 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/ICE/icectl.F90
r14072 r14219 60 60 !! * Substitutions 61 61 # include "do_loop_substitute.h90" 62 # include "single_precision_substitute.h90" 62 63 !!---------------------------------------------------------------------- 63 64 !! NEMO/ICE 4.0 , NEMO Consortium (2018) … … 705 706 CALL prt_ctl_info(' - Cell values : ') 706 707 CALL prt_ctl_info(' ~~~~~~~~~~~~~ ') 707 CALL prt_ctl(tab2d_1= e1e2t, clinfo1=' cell area :')708 CALL prt_ctl(tab2d_1=CASTWP(e1e2t) , clinfo1=' cell area :') 708 709 CALL prt_ctl(tab2d_1=at_i , clinfo1=' at_i :') 709 710 CALL prt_ctl(tab2d_1=ato_i , clinfo1=' ato_i :') -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/ICE/icedyn_adv_umx.F90
r14072 r14219 1140 1140 REAL(wp), DIMENSION(jpi,jpj,jpl) :: zbetup, zbetdo, zti_ups, ztj_ups 1141 1141 !!---------------------------------------------------------------------- 1142 zbig = 1.e+40_wp1143 1142 zbig = HUGE(1._wp) 1143 1144 1144 ! antidiffusive flux : high order minus low order 1145 1145 ! -------------------------------------------------- … … 1681 1681 !!====================================================================== 1682 1682 END MODULE icedyn_adv_umx 1683 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/ICE/icedyn_rhg_vp.F90
r14072 r14219 460 460 END DO 461 461 462 CALL lbc_lnk( 'icedyn_rhg_vp', zds, 'F', 1. ) ! MV TEST could be un-necessary according to Gurvan462 CALL lbc_lnk( 'icedyn_rhg_vp', zds, 'F', 1._wp ) ! MV TEST could be un-necessary according to Gurvan 463 463 CALL iom_put( 'zds' , zds ) ! MV DEBUG 464 464 … … 506 506 END DO 507 507 508 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zp_deltastar_t , 'T', 1. , zzt , 'T', 1., zet, 'T', 1.)508 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zp_deltastar_t , 'T', 1._wp , zzt , 'T', 1._wp, zet, 'T', 1._wp ) 509 509 510 510 CALL iom_put( 'zzt' , zzt ) ! MV DEBUG … … 526 526 END DO 527 527 528 CALL lbc_lnk( 'icedyn_rhg_vp', zef, 'F', 1. )528 CALL lbc_lnk( 'icedyn_rhg_vp', zef, 'F', 1._wp ) 529 529 CALL iom_put( 'zef' , zef ) ! MV DEBUG 530 530 IF( lwp ) WRITE(numout,*) ' outer loop 1c i_out : ', i_out … … 567 567 IF( lwp ) WRITE(numout,*) ' outer loop 1d i_out : ', i_out 568 568 569 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zCwU , 'U', -1. , zCwV, 'V', -1.)570 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zCorU, 'U', -1. , zCorV, 'V', -1.)569 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zCwU , 'U', -1._wp, zCwV, 'V', -1._wp ) 570 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zCorU, 'U', -1._wp, zCorV, 'V', -1._wp ) 571 571 572 572 CALL iom_put( 'zCwU' , zCwU ) ! MV DEBUG … … 628 628 END DO 629 629 630 CALL lbc_lnk( 'icedyn_rhg_vp', zs12_rhsu, 'F', 1. )631 CALL lbc_lnk( 'icedyn_rhg_vp', zs12_rhsv, 'F', 1. )630 CALL lbc_lnk( 'icedyn_rhg_vp', zs12_rhsu, 'F', 1._wp ) 631 CALL lbc_lnk( 'icedyn_rhg_vp', zs12_rhsv, 'F', 1._wp ) 632 632 633 633 CALL iom_put( 'zs12_rhsu' , zs12_rhsu ) ! MV DEBUG … … 674 674 END DO 675 675 676 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zrhsu, 'U', -1. , zrhsv, 'V', -1.)677 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zmU_t, 'U', -1. , zmV_t, 'V', -1.)678 CALL lbc_lnk_multi( 'icedyn_rhg_vp', ztaux_oi_rhsu, 'U', -1. , ztauy_oi_rhsv, 'V', -1.)676 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zrhsu, 'U', -1._wp, zrhsv, 'V', -1._wp) 677 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zmU_t, 'U', -1._wp, zmV_t, 'V', -1._wp) 678 CALL lbc_lnk_multi( 'icedyn_rhg_vp', ztaux_oi_rhsu, 'U', -1._wp, ztauy_oi_rhsv, 'V', -1._wp) 679 679 680 680 CALL iom_put( 'zmU_t' , zmU_t ) ! MV DEBUG … … 779 779 END DO 780 780 781 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zAU , 'U', 1. , zAV , 'V', 1.)782 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zBU , 'U', 1. , zBV , 'V', 1.)783 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zCU , 'U', 1. , zCV , 'V', 1.)784 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zDU , 'U', 1. , zDV , 'V', 1.)785 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zEU , 'U', 1. , zEV , 'V', 1.)781 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zAU , 'U', 1._wp, zAV , 'V', 1._wp ) 782 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zBU , 'U', 1._wp, zBV , 'V', 1._wp ) 783 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zCU , 'U', 1._wp, zCV , 'V', 1._wp ) 784 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zDU , 'U', 1._wp, zDV , 'V', 1._wp ) 785 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zEU , 'U', 1._wp, zEV , 'V', 1._wp ) 786 786 787 787 CALL iom_put( 'zAU' , zAU ) ! MV DEBUG … … 867 867 END DO 868 868 869 CALL lbc_lnk( 'icedyn_rhg_vp', zFU, 'U', 1. )869 CALL lbc_lnk( 'icedyn_rhg_vp', zFU, 'U', 1._wp ) 870 870 871 871 !--------------- … … 885 885 END DO 886 886 887 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zFU_prime, 'U', 1. , zBU_prime, 'U', 1.)887 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zFU_prime, 'U', 1._wp, zBU_prime, 'U', 1._wp ) 888 888 889 889 !----------------------------- … … 965 965 END DO 966 966 967 CALL lbc_lnk _multi( 'icedyn_rhg_vp', zFV, 'V', 1.)967 CALL lbc_lnk( 'icedyn_rhg_vp', zFV, 'V', 1._wp) 968 968 969 969 !--------------- … … 983 983 END DO 984 984 985 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zFV_prime, 'V', 1. , zBV_prime, 'V', 1.)985 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zFV_prime, 'V', 1._wp, zBV_prime, 'V', 1._wp ) 986 986 987 987 !----------------------------- … … 1020 1020 ENDIF ! ll_v_iterate 1021 1021 1022 CALL lbc_lnk_multi( 'icedyn_rhg_vp', u_ice, 'U', -1. , v_ice, 'V', -1.)1022 CALL lbc_lnk_multi( 'icedyn_rhg_vp', u_ice, 'U', -1._wp, v_ice, 'V', -1._wp ) 1023 1023 1024 1024 !-------------------------------------------------------------------------------------- … … 1110 1110 IF ( lwp ) WRITE(numout,*) ' We are out of outer loop ' 1111 1111 1112 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zFU , 'U', 1. , zFV , 'V', 1.)1113 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zBU_prime , 'U', 1. , zBV_prime , 'V', 1.)1114 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zFU_prime , 'U', 1. , zFV_prime , 'V', 1.)1115 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zCU_prime , 'U', 1. , zCV_prime , 'V', 1.)1112 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zFU , 'U', 1._wp, zFV , 'V', 1._wp ) 1113 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zBU_prime , 'U', 1._wp, zBV_prime , 'V', 1._wp ) 1114 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zFU_prime , 'U', 1._wp, zFV_prime , 'V', 1._wp ) 1115 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zCU_prime , 'U', 1._wp, zCV_prime , 'V', 1._wp ) 1116 1116 1117 1117 CALL iom_put( 'zFU' , zFU ) ! MV DEBUG … … 1125 1125 CALL iom_put( 'zFV_prime' , zFV_prime ) ! MV DEBUG 1126 1126 1127 CALL lbc_lnk_multi( 'icedyn_rhg_vp', u_ice, 'U', -1. , v_ice, 'V', -1.)1127 CALL lbc_lnk_multi( 'icedyn_rhg_vp', u_ice, 'U', -1._wp, v_ice, 'V', -1._wp ) 1128 1128 1129 1129 IF ( lwp ) WRITE(numout,*) ' We are about to output uice_dbg ' … … 1161 1161 END DO 1162 1162 1163 CALL lbc_lnk_multi( 'icedyn_rhg_vp', u_ice, 'U', -1. , v_ice, 'V', -1.)1163 CALL lbc_lnk_multi( 'icedyn_rhg_vp', u_ice, 'U', -1._wp, v_ice, 'V', -1._wp ) 1164 1164 1165 1165 IF ( lwp ) WRITE(numout,*) ' Velocity replaced ' … … 1222 1222 IF ( lwp ) WRITE(numout,*) ' Deformation recalculated ' 1223 1223 1224 CALL lbc_lnk_multi( 'icedyn_rhg_vp', pshear_i, 'T', 1. , pdivu_i, 'T', 1., pdelta_i, 'T', 1.)1224 CALL lbc_lnk_multi( 'icedyn_rhg_vp', pshear_i, 'T', 1._wp, pdivu_i, 'T', 1._wp, pdelta_i, 'T', 1._wp ) 1225 1225 1226 1226 !------------------------------------------------------------------------------! … … 1249 1249 END DO 1250 1250 1251 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zs1, 'T', 1. , zs2, 'T', 1., zs12, 'T', 1.)1251 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zs1, 'T', 1._wp, zs2, 'T', 1._wp, zs12, 'T', 1._wp ) 1252 1252 1253 1253 ENDIF … … 1268 1268 END DO 1269 1269 1270 CALL lbc_lnk( 'icedyn_rhg_vp', zs12f, 'F', 1. )1270 CALL lbc_lnk( 'icedyn_rhg_vp', zs12f, 'F', 1._wp ) 1271 1271 1272 1272 ENDIF … … 1307 1307 1308 1308 ! 1309 CALL lbc_lnk_multi( 'icedyn_rhg_vp', ztaux_oi, 'U', -1. , ztauy_oi, 'V', -1., ztaux_ai, 'U', -1., ztauy_ai, 'V', -1.) !, &1309 CALL lbc_lnk_multi( 'icedyn_rhg_vp', ztaux_oi, 'U', -1._wp, ztauy_oi, 'V', -1._wp, ztaux_ai, 'U', -1._wp, ztauy_ai, 'V', -1._wp ) !, & 1310 1310 ! & ztaux_bi, 'U', -1., ztauy_bi, 'V', -1. ) 1311 1311 ! … … 1348 1348 END DO 1349 1349 1350 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zsig_I, 'T', 1. , zsig_II, 'T', 1.)1350 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zsig_I, 'T', 1._wp, zsig_II, 'T', 1._wp) 1351 1351 1352 1352 IF( iom_use('normstr') ) CALL iom_put( 'normstr' , zsig_I(:,:) * zmsk00(:,:) ) ! Normal stress … … 1393 1393 IF ( lwp ) WRITE(numout,*) 'Some shitty stress work done' 1394 1394 ! 1395 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zsig1_p, 'T', 1. , zsig2_p, 'T', 1.)1395 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zsig1_p, 'T', 1._wp, zsig2_p, 'T', 1._wp) 1396 1396 ! 1397 1397 IF ( lwp ) WRITE(numout,*) ' Beauaaaarflblbllll ' … … 1423 1423 END DO 1424 1424 ! 1425 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zspgU, 'U', -1. , zspgV, 'V', -1., &1426 & zCorU, 'U', -1. , zCorV, 'V', -1.)1425 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zspgU, 'U', -1._wp, zspgV, 'V', -1._wp, & 1426 & zCorU, 'U', -1._wp, zCorV, 'V', -1._wp ) 1427 1427 ! 1428 1428 CALL iom_put( 'dssh_dx' , zspgU * zmsk00 ) ! Sea-surface tilt term in force balance (x) … … 1453 1453 END DO 1454 1454 1455 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zfU, 'U', -1. , zfV, 'V', -1.)1455 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zfU, 'U', -1._wp, zfV, 'V', -1._wp ) 1456 1456 1457 1457 CALL iom_put( 'intstrx' , zfU * zmsk00 ) ! Internal force term in force balance (x) … … 1485 1485 END DO 1486 1486 1487 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zdiag_xmtrp_ice, 'U', -1. , zdiag_ymtrp_ice, 'V', -1., &1488 & zdiag_xmtrp_snw, 'U', -1. , zdiag_ymtrp_snw, 'V', -1., &1489 & zdiag_xatrp , 'U', -1. , zdiag_yatrp , 'V', -1.)1487 CALL lbc_lnk_multi( 'icedyn_rhg_vp', zdiag_xmtrp_ice, 'U', -1._wp, zdiag_ymtrp_ice, 'V', -1._wp, & 1488 & zdiag_xmtrp_snw, 'U', -1._wp, zdiag_ymtrp_snw, 'V', -1._wp, & 1489 & zdiag_xatrp , 'U', -1._wp, zdiag_yatrp , 'V', -1._wp ) 1490 1490 1491 1491 CALL iom_put( 'xmtrpice' , zdiag_xmtrp_ice ) ! X-component of sea-ice mass transport (kg/s) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/ICE/icerst.F90
r14072 r14219 37 37 PUBLIC ice_rst_read ! called by ice_init 38 38 39 # include "single_precision_substitute.h90" 39 40 !!---------------------------------------------------------------------- 40 41 !! NEMO/ICE 4.0 , NEMO Consortium (2018) … … 138 139 ! ------------------ 139 140 ! ! calendar control 140 CALL iom_rstput( iter, nitrst, numriw, 'nn_fsbc', REAL( nn_fsbc, wp ) ) ! time-step141 CALL iom_rstput( iter, nitrst, numriw, 'kt_ice' , REAL( iter , wp ) ) ! date141 CALL iom_rstput( iter, nitrst, numriw, 'nn_fsbc', REAL( nn_fsbc, dp ) ) ! time-step 142 CALL iom_rstput( iter, nitrst, numriw, 'kt_ice' , REAL( iter , dp ) ) ! date 142 143 143 144 IF(.NOT.lwxios) CALL iom_delay_rst( 'WRITE', 'ICE', numriw ) ! save only ice delayed global communication variables … … 329 330 ! 330 331 IF(lwp) WRITE(numout,*) ' SAS: default initialisation of ss[st]_m arrays used in ice_istate' 331 IF( l_useCT ) THEN ; sst_m(:,:) = eos_pt_from_ct( ts(:,:,1,jp_tem, Kmm), ts(:,:,1,jp_sal, Kmm) )332 IF( l_useCT ) THEN ; sst_m(:,:) = eos_pt_from_ct( CASTWP(ts(:,:,1,jp_tem, Kmm)), CASTWP(ts(:,:,1,jp_sal, Kmm)) ) 332 333 ELSE ; sst_m(:,:) = ts(:,:,1,jp_tem, Kmm) 333 334 ENDIF -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/ICE/icestp.F90
r14072 r14219 87 87 !! * Substitutions 88 88 # include "do_loop_substitute.h90" 89 # include "single_precision_substitute.h90" 89 90 !!---------------------------------------------------------------------- 90 91 !! NEMO/ICE 4.0 , NEMO Consortium (2018) … … 212 213 ! --- Ocean time step --- ! 213 214 !-------------------------! 214 CALL ice_update_tau( kt, uu(:,:,1,Kbb), vv(:,:,1,Kbb) ) ! -- update surface ocean stresses215 CALL ice_update_tau( kt, CASTWP(uu(:,:,1,Kbb)), CASTWP(vv(:,:,1,Kbb)) ) ! -- update surface ocean stresses 215 216 !!gm remark, the ocean-ice stress is not saved in ice diag call above ..... find a solution!!! 216 217 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/ASM/asminc.F90
r14090 r14219 97 97 # include "do_loop_substitute.h90" 98 98 # include "domzgr_substitute.h90" 99 # include "single_precision_substitute.h90" 99 100 !!---------------------------------------------------------------------- 100 101 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 516 517 INTEGER , INTENT(in ) :: kt ! Current time step 517 518 INTEGER , INTENT(in ) :: Kbb, Kmm, Krhs ! Time level indices 518 REAL( wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation519 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation 519 520 ! 520 521 INTEGER :: ji, jj, jk … … 528 529 IF( ln_temnofreeze ) THEN 529 530 DO jk = 1, jpkm1 530 CALL eos_fzp( pts(:,:,jk,jp_sal,Kmm), fzptnz(:,:,jk), gdept(:,:,jk,Kmm) )531 CALL eos_fzp( CASTWP(pts(:,:,jk,jp_sal,Kmm)), fzptnz(:,:,jk), CASTWP(gdept(:,:,jk,Kmm)) ) 531 532 END DO 532 533 ENDIF … … 619 620 END_3D 620 621 621 CALL eos( pts(:,:,:,:,Kbb), rhd, rhop, gdept_0(:,:,:) ) ! Before potential and in situ densities622 CALL eos( CASTWP(pts(:,:,:,:,Kbb)), rhd, rhop, gdept_0(:,:,:) ) ! Before potential and in situ densities 622 623 !!gm fabien 623 624 ! CALL eos( pts(:,:,:,:,Kbb), rhd, rhop ) ! Before potential and in situ densities … … 667 668 INTEGER , INTENT( in ) :: kt ! ocean time-step index 668 669 INTEGER , INTENT( in ) :: Kbb, Kmm, Krhs ! ocean time level indices 669 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation670 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 670 671 ! 671 672 INTEGER :: jk -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/BDY/bdydyn.F90
r13237 r14219 32 32 !! * Substitutions 33 33 # include "domzgr_substitute.h90" 34 # include "single_precision_substitute.h90" 34 35 !!---------------------------------------------------------------------- 35 36 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 48 49 INTEGER , INTENT(in) :: kt ! Main time step counter 49 50 INTEGER , INTENT(in) :: Kbb, Kaa ! Ocean time level indices 50 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! Ocean velocities (to be updated at open boundaries)51 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! Ocean velocities (to be updated at open boundaries) 51 52 LOGICAL, OPTIONAL , INTENT(in) :: dyn3d_only ! T => only update baroclinic velocities 52 53 ! … … 101 102 !------------------------------------------------------- 102 103 103 IF( ll_dyn2d ) CALL bdy_dyn2d( kt, zua2d, zva2d, uu_b(:,:,Kbb), vv_b(:,:,Kbb), r1_hu(:,:,Kaa), r1_hv(:,:,Kaa), ssh(:,:,Kaa) )104 IF( ll_dyn2d ) CALL bdy_dyn2d( kt, zua2d, zva2d, uu_b(:,:,Kbb), vv_b(:,:,Kbb), r1_hu(:,:,Kaa), r1_hv(:,:,Kaa), CASTWP(ssh(:,:,Kaa)) ) 104 105 105 106 IF( ll_dyn3d ) CALL bdy_dyn3d( kt, Kbb, puu, pvv, Kaa ) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/BDY/bdydyn2d.F90
r13226 r14219 304 304 !! 305 305 !!---------------------------------------------------------------------- 306 REAL( wp), DIMENSION(jpi,jpj,1), INTENT(inout) :: zssh ! Sea level, need 3 dimensions to be used by bdy_nmn306 REAL(dp), DIMENSION(jpi,jpj,1), INTENT(inout) :: zssh ! Sea level, need 3 dimensions to be used by bdy_nmn 307 307 !! 308 308 INTEGER :: ib_bdy, ir ! bdy index, rim index -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/BDY/bdydyn3d.F90
r13226 r14219 26 26 PUBLIC bdy_dyn3d_dmp ! routine called by step 27 27 28 # include "single_precision_substitute.h90" 28 29 !!---------------------------------------------------------------------- 29 30 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 42 43 INTEGER , INTENT( in ) :: kt ! Main time step counter 43 44 INTEGER , INTENT( in ) :: Kbb, Kaa ! Time level indices 44 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) :: puu, pvv ! Ocean velocities (to be updated at open boundaries)45 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) :: puu, pvv ! Ocean velocities (to be updated at open boundaries) 45 46 ! 46 47 INTEGER :: ib_bdy, ir ! BDY set index, rim index … … 118 119 !!---------------------------------------------------------------------- 119 120 INTEGER , INTENT( in ) :: Kaa ! Time level index 120 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) :: puu, pvv ! Ocean velocities (to be updated at open boundaries)121 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) :: puu, pvv ! Ocean velocities (to be updated at open boundaries) 121 122 TYPE(OBC_INDEX) , INTENT( in ) :: idx ! OBC indices 122 123 TYPE(OBC_DATA) , INTENT( in ) :: dta ! OBC external data … … 157 158 !!---------------------------------------------------------------------- 158 159 INTEGER , INTENT( in ) :: Kaa ! Time level index 159 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) :: puu, pvv ! Ocean velocities (to be updated at open boundaries)160 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) :: puu, pvv ! Ocean velocities (to be updated at open boundaries) 160 161 TYPE(OBC_INDEX) , INTENT( in ) :: idx ! OBC indices 161 162 TYPE(OBC_DATA) , INTENT( in ) :: dta ! OBC external data … … 222 223 INTEGER , INTENT( in ) :: kt ! time step index 223 224 INTEGER , INTENT( in ) :: Kaa ! Time level index 224 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) :: puu, pvv ! Ocean velocities (to be updated at open boundaries)225 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) :: puu, pvv ! Ocean velocities (to be updated at open boundaries) 225 226 TYPE(OBC_INDEX) , INTENT( in ) :: idx ! OBC indices 226 227 TYPE(OBC_DATA) , INTENT( in ) :: dta ! OBC external data … … 265 266 INTEGER , INTENT( in ) :: kt ! time step index 266 267 INTEGER , INTENT( in ) :: Kaa ! Time level index 267 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) :: puu, pvv ! Ocean velocities (to be updated at open boundaries)268 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) :: puu, pvv ! Ocean velocities (to be updated at open boundaries) 268 269 TYPE(OBC_INDEX) , INTENT( in ) :: idx ! OBC indices 269 270 TYPE(OBC_DATA) , INTENT( in ) :: dta ! OBC external data … … 309 310 !!---------------------------------------------------------------------- 310 311 INTEGER , INTENT( in ) :: Kbb, Kaa ! Time level indices 311 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) :: puu, pvv ! Ocean velocities (to be updated at open boundaries)312 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) :: puu, pvv ! Ocean velocities (to be updated at open boundaries) 312 313 TYPE(OBC_INDEX) , INTENT( in ) :: idx ! OBC indices 313 314 TYPE(OBC_DATA) , INTENT( in ) :: dta ! OBC external data … … 323 324 igrd = 2 ! Orlanski bc on u-velocity; 324 325 ! 325 CALL bdy_orlanski_3d( idx, igrd, puu(:,:,:,Kbb), puu(:,:,:,Kaa), dta%u3d, ll_npo, llrim0 )326 CALL bdy_orlanski_3d( idx, igrd, CASTWP(puu(:,:,:,Kbb)), puu(:,:,:,Kaa), dta%u3d, ll_npo, llrim0 ) 326 327 327 328 igrd = 3 ! Orlanski bc on v-velocity 328 329 ! 329 CALL bdy_orlanski_3d( idx, igrd, pvv(:,:,:,Kbb), pvv(:,:,:,Kaa), dta%v3d, ll_npo, llrim0 )330 CALL bdy_orlanski_3d( idx, igrd, CASTWP(pvv(:,:,:,Kbb)), pvv(:,:,:,Kaa), dta%v3d, ll_npo, llrim0 ) 330 331 ! 331 332 END SUBROUTINE bdy_dyn3d_orlanski … … 341 342 INTEGER , INTENT( in ) :: kt ! time step 342 343 INTEGER , INTENT( in ) :: Kbb, Krhs ! Time level indices 343 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) :: puu, pvv ! Ocean velocities and trends (to be updated at open boundaries)344 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) :: puu, pvv ! Ocean velocities and trends (to be updated at open boundaries) 344 345 ! 345 346 INTEGER :: jb, jk ! dummy loop indices … … 392 393 !!---------------------------------------------------------------------- 393 394 INTEGER , INTENT( in ) :: Kaa ! Time level index 394 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) :: puu, pvv ! Ocean velocities (to be updated at open boundaries)395 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) :: puu, pvv ! Ocean velocities (to be updated at open boundaries) 395 396 TYPE(OBC_INDEX) , INTENT( in ) :: idx ! OBC indices 396 397 INTEGER , INTENT( in ) :: ib_bdy ! BDY set index -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/BDY/bdyini.F90
r13541 r14219 1801 1801 !!================================================================================= 1802 1802 END MODULE bdyini 1803 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/BDY/bdylib.F90
r13527 r14219 45 45 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices 46 46 REAL(wp), DIMENSION(:,:), POINTER, INTENT(in) :: dta ! OBC external data 47 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: phia ! tracer trend47 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: phia ! tracer trend 48 48 !! 49 49 REAL(wp) :: zwgt ! boundary weight … … 74 74 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices 75 75 REAL(wp), DIMENSION(:,:), POINTER, INTENT(in) :: dta ! OBC external data 76 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: phia ! tracer trend76 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: phia ! tracer trend 77 77 !! 78 78 INTEGER :: ib, ik, igrd ! dummy loop indices … … 102 102 TYPE(OBC_INDEX), INTENT(in ) :: idx ! OBC indices 103 103 REAL(wp), DIMENSION(:,:), POINTER, INTENT(in ) :: dta ! OBC external data 104 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: phib ! before tracer field105 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: phia ! tracer trend104 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: phib ! before tracer field 105 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: phia ! tracer trend 106 106 LOGICAL , INTENT(in ) :: lrim0 ! indicate if rim 0 is treated 107 107 LOGICAL , INTENT(in ) :: ll_npo ! switch for NPO version … … 112 112 igrd = 1 ! Everything is at T-points here 113 113 ! 114 CALL bdy_orlanski_3d( idx, igrd, phib(:,:,:), phia(:,:,:), dta, lrim0, ll_npo )114 CALL bdy_orlanski_3d( idx, igrd, REAL(phib(:,:,:), wp), phia(:,:,:), dta, lrim0, ll_npo ) 115 115 ! 116 116 END SUBROUTINE bdy_orl … … 152 152 REAL(wp), POINTER, DIMENSION(:,:) :: zmask_xdif ! land/sea mask for x-derivatives 153 153 REAL(wp), POINTER, DIMENSION(:,:) :: zmask_ydif ! land/sea mask for y-derivatives 154 REAL( wp), POINTER, DIMENSION(:,:) :: pe_xdif ! scale factors for x-derivatives155 REAL( wp), POINTER, DIMENSION(:,:) :: pe_ydif ! scale factors for y-derivatives154 REAL(dp), POINTER, DIMENSION(:,:) :: pe_xdif ! scale factors for x-derivatives 155 REAL(dp), POINTER, DIMENSION(:,:) :: pe_ydif ! scale factors for y-derivatives 156 156 !!---------------------------------------------------------------------- 157 157 ! … … 293 293 INTEGER , INTENT(in ) :: igrd ! grid index 294 294 REAL(wp), DIMENSION(:,:,:), INTENT(in ) :: phib ! model before 3D field 295 REAL( wp), DIMENSION(:,:,:), INTENT(inout) :: phia ! model after 3D field (to be updated)295 REAL(dp), DIMENSION(:,:,:), INTENT(inout) :: phia ! model after 3D field (to be updated) 296 296 REAL(wp), DIMENSION(:,: ), POINTER, INTENT(in ) :: phi_ext ! external forcing data 297 297 LOGICAL , INTENT(in ) :: lrim0 ! indicate if rim 0 is treated … … 314 314 REAL(wp), POINTER, DIMENSION(:,:,:) :: zmask_xdif ! land/sea mask for x-derivatives 315 315 REAL(wp), POINTER, DIMENSION(:,:,:) :: zmask_ydif ! land/sea mask for y-derivatives 316 REAL( wp), POINTER, DIMENSION(:,:) :: pe_xdif ! scale factors for x-derivatives317 REAL( wp), POINTER, DIMENSION(:,:) :: pe_ydif ! scale factors for y-derivatives316 REAL(dp), POINTER, DIMENSION(:,:) :: pe_xdif ! scale factors for x-derivatives 317 REAL(dp), POINTER, DIMENSION(:,:) :: pe_ydif ! scale factors for y-derivatives 318 318 !!---------------------------------------------------------------------- 319 319 ! … … 458 458 !!---------------------------------------------------------------------- 459 459 INTEGER, INTENT(in ) :: igrd ! grid index 460 REAL( wp), DIMENSION(:,:,:), INTENT(inout) :: phia ! model after 3D field (to be updated), must be masked460 REAL(dp), DIMENSION(:,:,:), INTENT(inout) :: phia ! model after 3D field (to be updated), must be masked 461 461 TYPE(OBC_INDEX), INTENT(in ) :: idx ! OBC indices 462 462 LOGICAL , INTENT(in ) :: lrim0 ! indicate if rim 0 is treated -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/BDY/bdytides.F90
r14200 r14219 162 162 ! 163 163 ! SSH fields 164 clfile = TRIM(filtide)//'_grid_T.nc'165 CALL iom_open( clfile , inum )166 igrd = 1 ! Everything is at T-points here167 DO itide = 1, nb_harmo168 CALL iom_get( inum, jpdom_auto, TRIM(tide_harmonics(itide)%cname_tide)//'_z1', ztr(:,:) )169 CALL iom_get( inum, jpdom_auto, TRIM(tide_harmonics(itide)%cname_tide)//'_z2', zti(:,:) )170 IF( ASSOCIATED(dta%ssh) ) THEN ! we use bdy ssh on this mpi subdomain164 IF( ASSOCIATED(dta%ssh) ) THEN ! we use bdy ssh on this mpi subdomain 165 clfile = TRIM(filtide)//'_grid_T.nc' 166 CALL iom_open( clfile , inum ) 167 igrd = 1 ! Everything is at T-points here 168 DO itide = 1, nb_harmo 169 CALL iom_get( inum, jpdom_auto, TRIM(tide_harmonics(itide)%cname_tide)//'_z1', ztr(:,:) ) 170 CALL iom_get( inum, jpdom_auto, TRIM(tide_harmonics(itide)%cname_tide)//'_z2', zti(:,:) ) 171 171 DO ib = 1, SIZE(dta%ssh) 172 172 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) … … 175 175 td%ssh0(ib,itide,2) = zti(ii,ij) 176 176 END DO 177 END IF178 END DO179 CALL iom_close( inum )177 END DO 178 CALL iom_close( inum ) 179 ENDIF 180 180 ! 181 181 ! U fields 182 clfile = TRIM(filtide)//'_grid_U.nc'183 CALL iom_open( clfile , inum )184 igrd = 2 ! Everything is at U-points here185 DO itide = 1, nb_harmo186 CALL iom_get(inum, jpdom_auto, TRIM(tide_harmonics(itide)%cname_tide)//'_u1', ztr(:,:),cd_type='U',psgn=-1._wp)187 CALL iom_get(inum, jpdom_auto, TRIM(tide_harmonics(itide)%cname_tide)//'_u2', zti(:,:),cd_type='U',psgn=-1._wp)188 IF( ASSOCIATED(dta%u2d) ) THEN ! we use bdy u2d on this mpi subdomain182 IF( ASSOCIATED(dta%u2d) ) THEN ! we use bdy u2d on this mpi subdomain 183 clfile = TRIM(filtide)//'_grid_U.nc' 184 CALL iom_open( clfile , inum ) 185 igrd = 2 ! Everything is at U-points here 186 DO itide = 1, nb_harmo 187 CALL iom_get(inum, jpdom_auto, TRIM(tide_harmonics(itide)%cname_tide)//'_u1', ztr(:,:),cd_type='U',psgn=-1._wp) 188 CALL iom_get(inum, jpdom_auto, TRIM(tide_harmonics(itide)%cname_tide)//'_u2', zti(:,:),cd_type='U',psgn=-1._wp) 189 189 DO ib = 1, SIZE(dta%u2d) 190 190 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) … … 193 193 td%u0(ib,itide,2) = zti(ii,ij) 194 194 END DO 195 END IF196 END DO197 CALL iom_close( inum )195 END DO 196 CALL iom_close( inum ) 197 ENDIF 198 198 ! 199 199 ! V fields 200 clfile = TRIM(filtide)//'_grid_V.nc'201 CALL iom_open( clfile , inum )202 igrd = 3 ! Everything is at V-points here203 DO itide = 1, nb_harmo204 CALL iom_get(inum, jpdom_auto, TRIM(tide_harmonics(itide)%cname_tide)//'_v1', ztr(:,:),cd_type='V',psgn=-1._wp)205 CALL iom_get(inum, jpdom_auto, TRIM(tide_harmonics(itide)%cname_tide)//'_v2', zti(:,:),cd_type='V',psgn=-1._wp)206 IF( ASSOCIATED(dta%v2d) ) THEN ! we use bdy v2d on this mpi subdomain200 IF( ASSOCIATED(dta%v2d) ) THEN ! we use bdy v2d on this mpi subdomain 201 clfile = TRIM(filtide)//'_grid_V.nc' 202 CALL iom_open( clfile , inum ) 203 igrd = 3 ! Everything is at V-points here 204 DO itide = 1, nb_harmo 205 CALL iom_get(inum, jpdom_auto, TRIM(tide_harmonics(itide)%cname_tide)//'_v1', ztr(:,:),cd_type='V',psgn=-1._wp) 206 CALL iom_get(inum, jpdom_auto, TRIM(tide_harmonics(itide)%cname_tide)//'_v2', zti(:,:),cd_type='V',psgn=-1._wp) 207 207 DO ib = 1, SIZE(dta%v2d) 208 208 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) … … 211 211 td%v0(ib,itide,2) = zti(ii,ij) 212 212 END DO 213 END IF214 END DO215 CALL iom_close( inum )213 END DO 214 CALL iom_close( inum ) 215 ENDIF 216 216 ! 217 217 DEALLOCATE( ztr, zti ) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/BDY/bdytra.F90
r14072 r14219 49 49 INTEGER , INTENT(in) :: kt ! Main time step counter 50 50 INTEGER , INTENT(in) :: Kbb, Kaa ! time level indices 51 REAL( wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! tracer fields51 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! tracer fields 52 52 ! 53 53 INTEGER :: ib_bdy, jn, igrd, ir ! Loop indeces … … 118 118 !!---------------------------------------------------------------------- 119 119 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices 120 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pt ! tracer trend120 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pt ! tracer trend 121 121 INTEGER, INTENT(in) :: jpa ! TRA index 122 122 LOGICAL, INTENT(in) :: llrim0 ! indicate if rim 0 is treated … … 149 149 INTEGER , INTENT(in) :: kt ! time step 150 150 INTEGER , INTENT(in) :: Kbb, Krhs ! time level indices 151 REAL( wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation151 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation 152 152 ! 153 153 REAL(wp) :: zwgt ! boundary weight -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/CRS/crsfld.F90
r13472 r14219 34 34 # include "do_loop_substitute.h90" 35 35 # include "domzgr_substitute.h90" 36 # include "single_precision_substitute.h90" 36 37 !!---------------------------------------------------------------------- 37 38 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 101 102 ! Temperature 102 103 zt(:,:,:) = ts(:,:,:,jp_tem,Kmm) ; zt_crs(:,:,:) = 0._wp 103 CALL crs_dom_ope( zt, 'VOL', 'T', tmask, zt_crs, p_e12= e1e2t, p_e3=ze3t, psgn=1.0_wp )104 CALL crs_dom_ope( zt, 'VOL', 'T', tmask, zt_crs, p_e12=CASTWP(e1e2t), p_e3=ze3t, psgn=1.0_wp ) 104 105 tsn_crs(:,:,:,jp_tem) = zt_crs(:,:,:) 105 106 … … 110 111 ! Salinity 111 112 zs(:,:,:) = ts(:,:,:,jp_sal,Kmm) ; zs_crs(:,:,:) = 0._wp 112 CALL crs_dom_ope( zs, 'VOL', 'T', tmask, zs_crs, p_e12= e1e2t, p_e3=ze3t, psgn=1.0_wp )113 CALL crs_dom_ope( zs, 'VOL', 'T', tmask, zs_crs, p_e12=CASTWP(e1e2t), p_e3=ze3t, psgn=1.0_wp ) 113 114 tsn_crs(:,:,:,jp_sal) = zt_crs(:,:,:) 114 115 … … 117 118 118 119 ! U-velocity 119 CALL crs_dom_ope( uu(:,:,:,Kmm), 'SUM', 'U', umask, un_crs, p_e12=e2u, p_e3=ze3u, p_surf_crs=e2e3u_msk, psgn=-1.0_wp )120 CALL crs_dom_ope( CASTWP(uu(:,:,:,Kmm)), 'SUM', 'U', umask, un_crs, p_e12=CASTWP(e2u), p_e3=ze3u, p_surf_crs=e2e3u_msk, psgn=-1.0_wp ) 120 121 ! 121 122 zt(:,:,:) = 0._wp ; zs(:,:,:) = 0._wp ; zt_crs(:,:,:) = 0._wp ; zs_crs(:,:,:) = 0._wp … … 132 133 133 134 ! V-velocity 134 CALL crs_dom_ope( vv(:,:,:,Kmm), 'SUM', 'V', vmask, vn_crs, p_e12=e1v, p_e3=ze3v, p_surf_crs=e1e3v_msk, psgn=-1.0_wp )135 CALL crs_dom_ope( CASTWP(vv(:,:,:,Kmm)), 'SUM', 'V', vmask, vn_crs, p_e12=CASTWP(e1v), p_e3=ze3v, p_surf_crs=e1e3v_msk, psgn=-1.0_wp ) 135 136 ! 136 137 zt(:,:,:) = 0._wp ; zs(:,:,:) = 0._wp ; zt_crs(:,:,:) = 0._wp ; zs_crs(:,:,:) = 0._wp … … 158 159 CALL lbc_lnk( 'crsfld', z3d, 'T', 1.0_wp ) 159 160 ! 160 CALL crs_dom_ope( z3d, 'VOL', 'T', tmask, zt_crs, p_e12= e1e2t, p_e3=ze3t, psgn=1.0_wp )161 CALL crs_dom_ope( z3d, 'VOL', 'T', tmask, zt_crs, p_e12=CASTWP(e1e2t), p_e3=ze3t, psgn=1.0_wp ) 161 162 CALL iom_put( "ke", zt_crs ) 162 163 ENDIF … … 183 184 ! W-velocity 184 185 IF( ln_crs_wn ) THEN 185 CALL crs_dom_ope( ww, 'SUM', 'W', tmask, wn_crs, p_e12= e1e2t, p_surf_crs=e1e2w_msk, psgn=1.0_wp )186 CALL crs_dom_ope( ww, 'SUM', 'W', tmask, wn_crs, p_e12=CASTWP(e1e2t), p_surf_crs=e1e2w_msk, psgn=1.0_wp ) 186 187 ! CALL crs_dom_ope( ww, 'VOL', 'W', tmask, wn_crs, p_e12=e1e2t, p_e3=ze3w ) 187 188 ELSE … … 197 198 SELECT CASE ( nn_crs_kz ) 198 199 CASE ( 0 ) 199 CALL crs_dom_ope( avt, 'VOL', 'W', tmask, avt_crs, p_e12= e1e2t, p_e3=ze3w, psgn=1.0_wp )200 CALL crs_dom_ope( avs, 'VOL', 'W', tmask, avs_crs, p_e12= e1e2t, p_e3=ze3w, psgn=1.0_wp )200 CALL crs_dom_ope( avt, 'VOL', 'W', tmask, avt_crs, p_e12=CASTWP(e1e2t), p_e3=ze3w, psgn=1.0_wp ) 201 CALL crs_dom_ope( avs, 'VOL', 'W', tmask, avs_crs, p_e12=CASTWP(e1e2t), p_e3=ze3w, psgn=1.0_wp ) 201 202 CASE ( 1 ) 202 CALL crs_dom_ope( avt, 'MAX', 'W', tmask, avt_crs, p_e12= e1e2t, p_e3=ze3w, psgn=1.0_wp )203 CALL crs_dom_ope( avs, 'MAX', 'W', tmask, avs_crs, p_e12= e1e2t, p_e3=ze3w, psgn=1.0_wp )203 CALL crs_dom_ope( avt, 'MAX', 'W', tmask, avt_crs, p_e12=CASTWP(e1e2t), p_e3=ze3w, psgn=1.0_wp ) 204 CALL crs_dom_ope( avs, 'MAX', 'W', tmask, avs_crs, p_e12=CASTWP(e1e2t), p_e3=ze3w, psgn=1.0_wp ) 204 205 CASE ( 2 ) 205 CALL crs_dom_ope( avt, 'MIN', 'W', tmask, avt_crs, p_e12= e1e2t, p_e3=ze3w, psgn=1.0_wp )206 CALL crs_dom_ope( avs, 'MIN', 'W', tmask, avs_crs, p_e12= e1e2t, p_e3=ze3w, psgn=1.0_wp )206 CALL crs_dom_ope( avt, 'MIN', 'W', tmask, avt_crs, p_e12=CASTWP(e1e2t), p_e3=ze3w, psgn=1.0_wp ) 207 CALL crs_dom_ope( avs, 'MIN', 'W', tmask, avs_crs, p_e12=CASTWP(e1e2t), p_e3=ze3w, psgn=1.0_wp ) 207 208 END SELECT 208 209 ! … … 211 212 212 213 ! sbc fields 213 CALL crs_dom_ope( ssh(:,:,Kmm) , 'VOL', 'T', tmask, sshn_crs , p_e12=e1e2t, p_e3=ze3t , psgn=1.0_wp )214 CALL crs_dom_ope( CASTWP(ssh(:,:,Kmm)) , 'VOL', 'T', tmask, sshn_crs , p_e12=CASTWP(e1e2t), p_e3=ze3t , psgn=1.0_wp ) 214 215 CALL crs_dom_ope( utau , 'SUM', 'U', umask, utau_crs , p_e12=e2u , p_surf_crs=e2u_crs , psgn=1.0_wp ) 215 216 CALL crs_dom_ope( vtau , 'SUM', 'V', vmask, vtau_crs , p_e12=e1v , p_surf_crs=e1v_crs , psgn=1.0_wp ) 216 CALL crs_dom_ope( wndm , 'SUM', 'T', tmask, wndm_crs , p_e12= e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0_wp )217 CALL crs_dom_ope( wndm , 'SUM', 'T', tmask, wndm_crs , p_e12=CASTWP(e1e2t), p_surf_crs=e1e2t_crs, psgn=1.0_wp ) 217 218 CALL crs_dom_ope( rnf , 'MAX', 'T', tmask, rnf_crs , psgn=1.0_wp ) 218 CALL crs_dom_ope( qsr , 'SUM', 'T', tmask, qsr_crs , p_e12= e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0_wp )219 CALL crs_dom_ope( emp_b, 'SUM', 'T', tmask, emp_b_crs, p_e12= e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0_wp )220 CALL crs_dom_ope( emp , 'SUM', 'T', tmask, emp_crs , p_e12= e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0_wp )221 CALL crs_dom_ope( sfx , 'SUM', 'T', tmask, sfx_crs , p_e12= e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0_wp )222 CALL crs_dom_ope( fr_i , 'SUM', 'T', tmask, fr_i_crs , p_e12= e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0_wp )219 CALL crs_dom_ope( qsr , 'SUM', 'T', tmask, qsr_crs , p_e12=CASTWP(e1e2t), p_surf_crs=e1e2t_crs, psgn=1.0_wp ) 220 CALL crs_dom_ope( emp_b, 'SUM', 'T', tmask, emp_b_crs, p_e12=CASTWP(e1e2t), p_surf_crs=e1e2t_crs, psgn=1.0_wp ) 221 CALL crs_dom_ope( emp , 'SUM', 'T', tmask, emp_crs , p_e12=CASTWP(e1e2t), p_surf_crs=e1e2t_crs, psgn=1.0_wp ) 222 CALL crs_dom_ope( sfx , 'SUM', 'T', tmask, sfx_crs , p_e12=CASTWP(e1e2t), p_surf_crs=e1e2t_crs, psgn=1.0_wp ) 223 CALL crs_dom_ope( fr_i , 'SUM', 'T', tmask, fr_i_crs , p_e12=CASTWP(e1e2t), p_surf_crs=e1e2t_crs, psgn=1.0_wp ) 223 224 224 225 CALL iom_put( "ssh" , sshn_crs ) ! ssh output -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/CRS/crsini.F90
r13237 r14219 30 30 !! * Substitutions 31 31 # include "domzgr_substitute.h90" 32 # include "single_precision_substitute.h90" 32 33 !!---------------------------------------------------------------------- 33 34 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 127 128 ! 128 129 IF ( nresty /= 0 .AND. nrestx /= 0 ) THEN 129 CALL crs_dom_coordinates( gphit, glamt, 'T', gphit_crs, glamt_crs )130 CALL crs_dom_coordinates( CASTWP(gphit), CASTWP(glamt), 'T', gphit_crs, glamt_crs ) 130 131 CALL crs_dom_coordinates( gphiu, glamu, 'U', gphiu_crs, glamu_crs ) 131 132 CALL crs_dom_coordinates( gphiv, glamv, 'V', gphiv_crs, glamv_crs ) 132 CALL crs_dom_coordinates( gphif, glamf, 'F', gphif_crs, glamf_crs )133 CALL crs_dom_coordinates( CASTWP(gphif), CASTWP(glamf), 'F', gphif_crs, glamf_crs ) 133 134 ELSEIF ( nresty /= 0 .AND. nrestx == 0 ) THEN 134 135 CALL crs_dom_coordinates( gphiu, glamu, 'T', gphit_crs, glamt_crs ) 135 136 CALL crs_dom_coordinates( gphiu, glamu, 'U', gphiu_crs, glamu_crs ) 136 CALL crs_dom_coordinates( gphif, glamf, 'V', gphiv_crs, glamv_crs )137 CALL crs_dom_coordinates( gphif, glamf, 'F', gphif_crs, glamf_crs )137 CALL crs_dom_coordinates( CASTWP(gphif), CASTWP(glamf), 'V', gphiv_crs, glamv_crs ) 138 CALL crs_dom_coordinates( CASTWP(gphif), CASTWP(glamf), 'F', gphif_crs, glamf_crs ) 138 139 ELSEIF ( nresty == 0 .AND. nrestx /= 0 ) THEN 139 140 CALL crs_dom_coordinates( gphiv, glamv, 'T', gphit_crs, glamt_crs ) 140 CALL crs_dom_coordinates( gphif, glamf, 'U', gphiu_crs, glamu_crs )141 CALL crs_dom_coordinates( CASTWP(gphif), CASTWP(glamf), 'U', gphiu_crs, glamu_crs ) 141 142 CALL crs_dom_coordinates( gphiv, glamv, 'V', gphiv_crs, glamv_crs ) 142 CALL crs_dom_coordinates( gphif, glamf, 'F', gphif_crs, glamf_crs )143 CALL crs_dom_coordinates( CASTWP(gphif), CASTWP(glamf), 'F', gphif_crs, glamf_crs ) 143 144 ELSE 144 CALL crs_dom_coordinates( gphif, glamf, 'T', gphit_crs, glamt_crs )145 CALL crs_dom_coordinates( gphif, glamf, 'U', gphiu_crs, glamu_crs )146 CALL crs_dom_coordinates( gphif, glamf, 'V', gphiv_crs, glamv_crs )147 CALL crs_dom_coordinates( gphif, glamf, 'F', gphif_crs, glamf_crs )145 CALL crs_dom_coordinates(CASTWP(gphif),CASTWP(glamf), 'T', gphit_crs, glamt_crs ) 146 CALL crs_dom_coordinates(CASTWP(gphif),CASTWP(glamf), 'U', gphiu_crs, glamu_crs ) 147 CALL crs_dom_coordinates(CASTWP(gphif),CASTWP(glamf), 'V', gphiv_crs, glamv_crs ) 148 CALL crs_dom_coordinates(CASTWP(gphif),CASTWP(glamf), 'F', gphif_crs, glamf_crs ) 148 149 ENDIF 149 150 … … 153 154 ! 3.c.1 Horizontal scale factors 154 155 155 CALL crs_dom_hgr( e1t, e2t, 'T', e1t_crs, e2t_crs )156 CALL crs_dom_hgr( e1u, e2u, 'U', e1u_crs, e2u_crs )157 CALL crs_dom_hgr( e1v, e2v, 'V', e1v_crs, e2v_crs )158 CALL crs_dom_hgr( e1f, e2f, 'F', e1f_crs, e2f_crs )156 CALL crs_dom_hgr( CASTWP(e1t), CASTWP(e2t), 'T', e1t_crs, e2t_crs ) 157 CALL crs_dom_hgr( CASTWP(e1u), e2u, 'U', e1u_crs, e2u_crs ) 158 CALL crs_dom_hgr( e1v, CASTWP(e2v), 'V', e1v_crs, e2v_crs ) 159 CALL crs_dom_hgr( CASTWP(e1f), CASTWP(e2f), 'F', e1f_crs, e2f_crs ) 159 160 160 161 e1e2t_crs(:,:) = e1t_crs(:,:) * e2t_crs(:,:) … … 184 185 185 186 ! 3.d.2 Surfaces 186 CALL crs_dom_sfc( tmask, 'W', e1e2w_crs, e1e2w_msk, p_e1= e1t, p_e2=e2t)187 CALL crs_dom_sfc( tmask, 'W', e1e2w_crs, e1e2w_msk, p_e1=CASTWP(e1t), p_e2=CASTWP(e2t) ) 187 188 CALL crs_dom_sfc( umask, 'U', e2e3u_crs, e2e3u_msk, p_e2=e2u, p_e3=ze3u ) 188 189 CALL crs_dom_sfc( vmask, 'V', e1e3v_crs, e1e3v_msk, p_e1=e1v, p_e3=ze3v ) … … 193 194 ! 3.d.3 Vertical scale factors 194 195 ! 195 CALL crs_dom_e3( e1t, e2t, ze3t, e1e2w_crs, 'T', tmask, e3t_crs, e3t_max_crs)196 CALL crs_dom_e3( e1u, e2u, ze3u, e2e3u_crs, 'U', umask, e3u_crs, e3u_max_crs)197 CALL crs_dom_e3( e1v, e2v, ze3v, e1e3v_crs, 'V', vmask, e3v_crs, e3v_max_crs)198 CALL crs_dom_e3( e1t, e2t, ze3w, e1e2w_crs, 'W', tmask, e3w_crs, e3w_max_crs)196 CALL crs_dom_e3( CASTWP(e1t), CASTWP(e2t), ze3t, e1e2w_crs, 'T', tmask, e3t_crs, e3t_max_crs) 197 CALL crs_dom_e3( CASTWP(e1u), e2u, ze3u, e2e3u_crs, 'U', umask, e3u_crs, e3u_max_crs) 198 CALL crs_dom_e3( e1v, CASTWP(e2v), ze3v, e1e3v_crs, 'V', vmask, e3v_crs, e3v_max_crs) 199 CALL crs_dom_e3( CASTWP(e1t), CASTWP(e2t), ze3w, e1e2w_crs, 'W', tmask, e3w_crs, e3w_max_crs) 199 200 200 201 ! Replace 0 by e3t_0 or e3w_0 … … 219 220 !--------------------------------------------------------- 220 221 ! 4.a. Ocean volume or area unmasked and masked 221 CALL crs_dom_facvol( tmask, 'T', e1t, e2t, ze3t, ocean_volume_crs_t, facvol_t )222 CALL crs_dom_facvol( tmask, 'T', CASTWP(e1t), CASTWP(e2t), ze3t, ocean_volume_crs_t, facvol_t ) 222 223 ! 223 224 bt_crs(:,:,:) = ocean_volume_crs_t(:,:,:) * facvol_t(:,:,:) … … 226 227 WHERE( bt_crs /= 0._wp ) r1_bt_crs(:,:,:) = 1._wp / bt_crs(:,:,:) 227 228 228 CALL crs_dom_facvol( tmask, 'W', e1t, e2t, ze3w, ocean_volume_crs_w, facvol_w )229 CALL crs_dom_facvol( tmask, 'W', CASTWP(e1t), CASTWP(e2t), ze3w, ocean_volume_crs_w, facvol_w ) 229 230 ! 230 231 !--------------------------------------------------------- -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DIA/diaar5.F90
r14072 r14219 41 41 # include "do_loop_substitute.h90" 42 42 # include "domzgr_substitute.h90" 43 # include "single_precision_substitute.h90" 43 44 !!---------------------------------------------------------------------- 44 45 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 233 234 ztpot(:,:,jpk) = 0._wp 234 235 DO jk = 1, jpkm1 235 ztpot(:,:,jk) = eos_pt_from_ct( ts(:,:,jk,jp_tem,Kmm), ts(:,:,jk,jp_sal,Kmm) )236 ztpot(:,:,jk) = eos_pt_from_ct( CASTWP(ts(:,:,jk,jp_tem,Kmm)), CASTWP(ts(:,:,jk,jp_sal,Kmm)) ) 236 237 END DO 237 238 ! … … 269 270 ENDIF 270 271 271 IF( iom_use( 'tnpeo' )) THEN 272 IF( iom_use( 'tnpeo' )) THEN 272 273 ! Work done against stratification by vertical mixing 273 274 ! Exclude points where rn2 is negative as convection kicks in here and -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DIA/diadct.F90
r13286 r14219 92 92 !! * Substitutions 93 93 # include "domzgr_substitute.h90" 94 # include "single_precision_substitute.h90" 94 95 !!---------------------------------------------------------------------- 95 96 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 679 680 zsn = interp(Kmm,k%I,k%J,jk,'V',ts(:,:,:,jp_sal,Kmm) ) 680 681 zrhop = interp(Kmm,k%I,k%J,jk,'V',rhop) 681 zrhoi = interp(Kmm,k%I,k%J,jk,'V', rhd*rho0+rho0)682 zrhoi = interp(Kmm,k%I,k%J,jk,'V',CASTDP(rhd*rho0+rho0)) 682 683 zsshn = 0.5*( ssh(k%I,k%J,Kmm) + ssh(k%I,k%J+1,Kmm) ) * vmask(k%I,k%J,1) 683 684 CASE(2,3) … … 685 686 zsn = interp(Kmm,k%I,k%J,jk,'U',ts(:,:,:,jp_sal,Kmm) ) 686 687 zrhop = interp(Kmm,k%I,k%J,jk,'U',rhop) 687 zrhoi = interp(Kmm,k%I,k%J,jk,'U', rhd*rho0+rho0)688 zrhoi = interp(Kmm,k%I,k%J,jk,'U',CASTDP(rhd*rho0+rho0)) 688 689 zsshn = 0.5*( ssh(k%I,k%J,Kmm) + ssh(k%I+1,k%J,Kmm) ) * umask(k%I,k%J,1) 689 690 END SELECT … … 852 853 zsn = interp(Kmm,k%I,k%J,jk,'V',ts(:,:,:,jp_sal,Kmm) ) 853 854 zrhop = interp(Kmm,k%I,k%J,jk,'V',rhop) 854 zrhoi = interp(Kmm,k%I,k%J,jk,'V', rhd*rho0+rho0)855 zrhoi = interp(Kmm,k%I,k%J,jk,'V',CASTDP(rhd*rho0+rho0)) 855 856 856 857 CASE(2,3) … … 858 859 zsn = interp(Kmm,k%I,k%J,jk,'U',ts(:,:,:,jp_sal,Kmm) ) 859 860 zrhop = interp(Kmm,k%I,k%J,jk,'U',rhop) 860 zrhoi = interp(Kmm,k%I,k%J,jk,'U', rhd*rho0+rho0)861 zrhoi = interp(Kmm,k%I,k%J,jk,'U',CASTDP(rhd*rho0+rho0)) 861 862 zsshn = 0.5*( ssh(k%I,k%J,Kmm) + ssh(k%I+1,k%J,Kmm) ) * umask(k%I,k%J,1) 862 863 END SELECT … … 1169 1170 INTEGER, INTENT(IN) :: ki, kj, kk ! coordinate of point 1170 1171 CHARACTER(len=1), INTENT(IN) :: cd_point ! type of point (U, V) 1171 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(IN) :: ptab ! variable to compute at (ki, kj, kk )1172 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(IN) :: ptab ! variable to compute at (ki, kj, kk ) 1172 1173 REAL(wp) :: interp ! interpolated variable 1173 1174 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DIA/diadetide.F90
r12489 r14219 6 6 !! History : ! 2019 (S. Mueller) 7 7 !!---------------------------------------------------------------------- 8 USE par_oce , ONLY : wp,jpi, jpj8 USE par_oce , ONLY : jpi, jpj 9 9 USE in_out_manager , ONLY : lwp, numout 10 10 USE iom , ONLY : iom_put … … 12 12 USE phycst , ONLY : rpi 13 13 USE tide_mod 14 USE par_kind 14 15 #if defined key_iomput 15 16 USE xios -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DIA/diahsb.F90
r14072 r14219 44 44 REAL(wp) :: frc_wn_t, frc_wn_s ! global forcing trends 45 45 ! 46 REAL(wp), DIMENSION(:,:) , ALLOCATABLE :: surf 47 REAL(wp), DIMENSION(:,:) , ALLOCATABLE :: surf_ini , ssh_ini ! 46 REAL(dp), DIMENSION(:,:) , ALLOCATABLE :: surf 47 REAL(dp), DIMENSION(:,:) , ALLOCATABLE :: surf_ini 48 REAL(wp), DIMENSION(:,:) , ALLOCATABLE :: ssh_ini ! 48 49 REAL(wp), DIMENSION(:,:) , ALLOCATABLE :: ssh_hc_loc_ini, ssh_sc_loc_ini ! 49 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: hc_loc_ini, sc_loc_ini, e3t_ini ! 50 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: sc_loc_ini, e3t_ini ! 51 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: hc_loc_ini ! 50 52 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: tmask_ini 51 53 … … 75 77 INTEGER :: ji, jj, jk ! dummy loop indice 76 78 REAL(wp) :: zdiff_hc , zdiff_sc ! heat and salt content variations 77 REAL(wp) :: zdiff_hc1 , zdiff_sc1 ! - - - - 78 REAL(wp) :: zdiff_v1 , zdiff_v2 ! volume variation 79 REAL(wp) :: zdiff_hc1 , zdiff_sc1 ! - - - - 80 REAL(wp) :: zdiff_v1 ! volume variation 81 REAL(dp) :: zdiff_v2 79 82 REAL(wp) :: zerr_hc1 , zerr_sc1 ! heat and salt content misfit 80 83 REAL(wp) :: zvol_tot ! volume 81 84 REAL(wp) :: z_frc_trd_t , z_frc_trd_s ! - - 82 REAL( wp) :: z_frc_trd_v ! - -85 REAL(dp) :: z_frc_trd_v ! - - 83 86 REAL(wp) :: z_wn_trd_t , z_wn_trd_s ! - - 84 87 REAL(wp) :: z_ssh_hc , z_ssh_sc ! - - 85 88 REAL(wp), DIMENSION(jpi,jpj) :: z2d0, z2d1 ! 2D workspace 86 REAL( wp), DIMENSION(jpi,jpj,jpkm1) :: zwrk ! 3D workspace89 REAL(dp), DIMENSION(jpi,jpj,jpkm1) :: zwrk ! 3D workspace 87 90 !!--------------------------------------------------------------------------- 88 91 IF( ln_timing ) CALL timing_start('dia_hsb') -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DIA/diahth.F90
r13497 r14219 43 43 # include "do_loop_substitute.h90" 44 44 # include "domzgr_substitute.h90" 45 # include "single_precision_substitute.h90" 45 46 !!---------------------------------------------------------------------- 46 47 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 261 262 IF( iom_use ('hc300') ) THEN 262 263 zzdep = 300. 263 CALL dia_hth_htc( Kmm, zzdep, ts(:,:,:,jp_tem,Kmm), htc3 )264 CALL dia_hth_htc( Kmm, zzdep, CASTWP(ts(:,:,:,jp_tem,Kmm)), htc3 ) 264 265 CALL iom_put( 'hc300', rho0_rcp * htc3 ) ! vertically integrated heat content (J/m2) 265 266 ENDIF … … 270 271 IF( iom_use ('hc700') ) THEN 271 272 zzdep = 700. 272 CALL dia_hth_htc( Kmm, zzdep, ts(:,:,:,jp_tem,Kmm), htc7 )273 CALL dia_hth_htc( Kmm, zzdep, CASTWP(ts(:,:,:,jp_tem,Kmm)), htc7 ) 273 274 CALL iom_put( 'hc700', rho0_rcp * htc7 ) ! vertically integrated heat content (J/m2) 274 275 … … 280 281 IF( iom_use ('hc2000') ) THEN 281 282 zzdep = 2000. 282 CALL dia_hth_htc( Kmm, zzdep, ts(:,:,:,jp_tem,Kmm), htc20 )283 CALL dia_hth_htc( Kmm, zzdep, CASTWP(ts(:,:,:,jp_tem,Kmm)), htc20 ) 283 284 CALL iom_put( 'hc2000', rho0_rcp * htc20 ) ! vertically integrated heat content (J/m2) 284 285 ENDIF -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DIA/diamlr.F90
r13237 r14219 7 7 !!---------------------------------------------------------------------- 8 8 9 USE par_oce , ONLY : wp,jpi, jpj9 USE par_oce , ONLY : jpi, jpj 10 10 USE phycst , ONLY : rpi 11 11 USE dom_oce , ONLY : adatrj … … 15 15 USE iom , ONLY : iom_put, iom_use, iom_update_file_name 16 16 USE timing , ONLY : timing_start, timing_stop 17 USE par_kind 17 18 #if defined key_iomput 18 19 USE xios -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DIA/dianam.F90
r12489 r14219 61 61 INTEGER :: iyyss, iddss, ihhss, immss ! number of seconds in 1 year, 1 day, 1 hour and 1 minute 62 62 INTEGER :: iyymo ! number of months in 1 year 63 REAL(wp) :: zsec1, zsec2 ! not used 64 REAL(wp) :: zdrun, zjul ! temporary scalars 63 REAL(dp) :: zsec1, zsec2 ! not used 64 REAL(dp) :: zjul ! temporary scalars 65 REAL(wp) :: zdrun ! temporary scalars 65 66 !!---------------------------------------------------------------------- 66 67 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DIA/diawri.F90
r14200 r14219 1124 1124 CALL iom_rstput( 0, 0, inum, 'rhisf_cav_tbl', rhisf_tbl_cav ) ! now k-velocity 1125 1125 CALL iom_rstput( 0, 0, inum, 'rfrac_cav_tbl', rfrac_tbl_cav ) ! now k-velocity 1126 CALL iom_rstput( 0, 0, inum, 'misfkb_cav', REAL(misfkb_cav, wp) ) ! now k-velocity1127 CALL iom_rstput( 0, 0, inum, 'misfkt_cav', REAL(misfkt_cav, wp) ) ! now k-velocity1128 CALL iom_rstput( 0, 0, inum, 'mskisf_cav', REAL(mskisf_cav, wp), ktype = jp_i1 )1126 CALL iom_rstput( 0, 0, inum, 'misfkb_cav', REAL(misfkb_cav,dp) ) ! now k-velocity 1127 CALL iom_rstput( 0, 0, inum, 'misfkt_cav', REAL(misfkt_cav,dp) ) ! now k-velocity 1128 CALL iom_rstput( 0, 0, inum, 'mskisf_cav', REAL(mskisf_cav,dp), ktype = jp_i1 ) 1129 1129 END IF 1130 1130 IF (ln_isfpar_mlt) THEN 1131 CALL iom_rstput( 0, 0, inum, 'isfmsk_par', REAL(mskisf_par, wp) ) ! now k-velocity1131 CALL iom_rstput( 0, 0, inum, 'isfmsk_par', REAL(mskisf_par,dp) ) ! now k-velocity 1132 1132 CALL iom_rstput( 0, 0, inum, 'fwfisf_par', fwfisf_par ) ! now k-velocity 1133 1133 CALL iom_rstput( 0, 0, inum, 'rhisf_par_tbl', rhisf_tbl_par ) ! now k-velocity 1134 1134 CALL iom_rstput( 0, 0, inum, 'rfrac_par_tbl', rfrac_tbl_par ) ! now k-velocity 1135 CALL iom_rstput( 0, 0, inum, 'misfkb_par', REAL(misfkb_par, wp) ) ! now k-velocity1136 CALL iom_rstput( 0, 0, inum, 'misfkt_par', REAL(misfkt_par, wp) ) ! now k-velocity1137 CALL iom_rstput( 0, 0, inum, 'mskisf_par', REAL(mskisf_par, wp), ktype = jp_i1 )1135 CALL iom_rstput( 0, 0, inum, 'misfkb_par', REAL(misfkb_par,dp) ) ! now k-velocity 1136 CALL iom_rstput( 0, 0, inum, 'misfkt_par', REAL(misfkt_par,dp) ) ! now k-velocity 1137 CALL iom_rstput( 0, 0, inum, 'mskisf_par', REAL(mskisf_par,dp), ktype = jp_i1 ) 1138 1138 END IF 1139 1139 END IF -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DIU/diu_bulk.F90
r13558 r14219 97 97 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in) :: pqflux ! heat (non-solar) flux (Watts) 98 98 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in) :: ptauflux ! wind stress (kg/ m s^2) 99 REAL( wp), DIMENSION(jpi,jpj) , INTENT(in) :: prho ! water density (kg/m^3)100 REAL( wp) , INTENT(in) :: p_rdt ! time-step99 REAL(dp), DIMENSION(jpi,jpj) , INTENT(in) :: prho ! water density (kg/m^3) 100 REAL(dp) , INTENT(in) :: p_rdt ! time-step 101 101 REAL(wp), DIMENSION(jpi,jpj), OPTIONAL, INTENT(in) :: pLa ! Langmuir number 102 102 REAL(wp), DIMENSION(jpi,jpj), OPTIONAL, INTENT(in) :: pthick ! warm layer thickness (m) … … 180 180 ! Dummy variables 181 181 REAL(wp), DIMENSION(jpi,jpj), INTENT(IN) :: p_dsst ! Delta SST 182 REAL( wp), INTENT(IN) :: p_rdt ! Time-step182 REAL(dp), INTENT(IN) :: p_rdt ! Time-step 183 183 REAL(wp), DIMENSION(jpi,jpj), INTENT(IN) :: p_abflux ! Heat forcing 184 184 REAL(wp), DIMENSION(jpi,jpj), INTENT(IN) :: p_fvel ! Friction velocity … … 186 186 REAL(wp), DIMENSION(jpi,jpj), INTENT(IN) :: pmu ! Structure parameter 187 187 REAL(wp), DIMENSION(jpi,jpj), INTENT(IN) :: pthick ! Layer thickness 188 REAL( wp), DIMENSION(jpi,jpj), INTENT(IN) :: prho ! Water density188 REAL(dp), DIMENSION(jpi,jpj), INTENT(IN) :: prho ! Water density 189 189 190 190 ! Local variables -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DIU/diu_coolskin.F90
r14072 r14219 80 80 REAL(wp), INTENT(IN), DIMENSION(jpi,jpj) :: psqflux ! Heat (non-solar)(Watts) 81 81 REAL(wp), INTENT(IN), DIMENSION(jpi,jpj) :: pstauflux ! Wind stress (kg/ m s^2) 82 REAL( wp), INTENT(IN), DIMENSION(jpi,jpj) :: psrho ! Water density (kg/m^3)83 REAL( wp), INTENT(IN) :: pDt ! Time-step82 REAL(dp), INTENT(IN), DIMENSION(jpi,jpj) :: psrho ! Water density (kg/m^3) 83 REAL(dp), INTENT(IN) :: pDt ! Time-step 84 84 85 85 ! Local variables -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DOM/daymod.F90
r14072 r14219 69 69 !!---------------------------------------------------------------------- 70 70 INTEGER :: inbday, imonday, isecrst ! local integers 71 REAL( wp) :: zjul ! local scalar71 REAL(dp) :: zjul ! local scalar 72 72 !!---------------------------------------------------------------------- 73 73 ! … … 94 94 isecrst = ( nhour * NINT(rhhmm) + nminute ) * NINT(rmmss) 95 95 96 CALL ymds2ju( nyear, nmonth, nday, REAL(isecrst, wp), fjulday )96 CALL ymds2ju( nyear, nmonth, nday, REAL(isecrst,dp), fjulday ) 97 97 IF( ABS(fjulday - REAL(NINT(fjulday),wp)) < 0.1 / rday ) fjulday = REAL(NINT(fjulday),wp) ! avoid truncation error 98 98 IF( nhour*NINT(rhhmm*rmmss) + nminute*NINT(rmmss) - ndt05 .LT. 0 ) fjulday = fjulday+1. ! move back to the day at nit000 (and not at nit000 - 1) … … 116 116 117 117 !compute number of days between last Monday and today 118 CALL ymds2ju( 1900, 01, 01, 0.0_ wp, zjul ) ! compute julian day value of 01.01.1900 (our reference that was a Monday)118 CALL ymds2ju( 1900, 01, 01, 0.0_dp, zjul ) ! compute julian day value of 01.01.1900 (our reference that was a Monday) 119 119 inbday = FLOOR(fjulday - zjul) ! compute nb day between 01.01.1900 and start of current day 120 120 imonday = MOD(inbday, 7) ! compute nb day between last monday and current day … … 260 260 ! 261 261 !compute first day of the year in julian days 262 CALL ymds2ju( nyear, 01, 01, 0.0_ wp, fjulstartyear )262 CALL ymds2ju( nyear, 01, 01, 0.0_dp, fjulstartyear ) 263 263 ! 264 264 IF(lwp) WRITE(numout,'(a,i8,a,i4.4,a,i2.2,a,i2.2,a,i3.3)') '======>> time-step =', kt, & … … 401 401 ENDIF 402 402 ! calendar control 403 CALL iom_rstput( kt, nitrst, numrow, 'kt' , REAL( kt , wp) ) ! time-step404 CALL iom_rstput( kt, nitrst, numrow, 'ndastp' , REAL( ndastp, wp) ) ! date403 CALL iom_rstput( kt, nitrst, numrow, 'kt' , REAL( kt , dp) ) ! time-step 404 CALL iom_rstput( kt, nitrst, numrow, 'ndastp' , REAL( ndastp, dp) ) ! date 405 405 CALL iom_rstput( kt, nitrst, numrow, 'adatrj' , adatrj ) ! number of elapsed days since 406 406 ! ! the begining of the run [s] 407 CALL iom_rstput( kt, nitrst, numrow, 'ntime' , REAL( nn_time0, wp) ) ! time407 CALL iom_rstput( kt, nitrst, numrow, 'ntime' , REAL( nn_time0, dp) ) ! time 408 408 ENDIF 409 409 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DOM/dom_oce.F90
r14200 r14219 34 34 LOGICAL , PUBLIC :: ln_linssh !: =T linear free surface ==>> model level are fixed in time 35 35 LOGICAL , PUBLIC :: ln_meshmask !: =T create a mesh-mask file (mesh_mask.nc) 36 REAL( wp), PUBLIC :: rn_Dt !: time step for the dynamics and tracer37 REAL( wp), PUBLIC :: rn_atfp !: asselin time filter parameter36 REAL(dp), PUBLIC :: rn_Dt !: time step for the dynamics and tracer 37 REAL(dp), PUBLIC :: rn_atfp !: asselin time filter parameter 38 38 LOGICAL , PUBLIC :: ln_1st_euler !: =T start with forward time step or not (=F) 39 39 LOGICAL , PUBLIC :: ln_crs !: Apply grid coarsening to dynamical model output or online passive tracers … … 123 123 !! horizontal curvilinear coordinate and scale factors 124 124 !! --------------------------------------------------------------------- 125 REAL(wp), PUBLIC, ALLOCATABLE, SAVE , DIMENSION(:,:) :: glamt , glamu, glamv , glamf !: longitude at t, u, v, f-points [degree] 126 REAL(wp), PUBLIC, ALLOCATABLE, SAVE , DIMENSION(:,:) :: gphit , gphiu, gphiv , gphif !: latitude at t, u, v, f-points [degree] 127 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e1t , e2t , r1_e1t, r1_e2t !: t-point horizontal scale factors [m] 128 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e1u , e2u , r1_e1u, r1_e2u !: horizontal scale factors at u-point [m] 129 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e1v , e2v , r1_e1v, r1_e2v !: horizontal scale factors at v-point [m] 130 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e1f , e2f , r1_e1f, r1_e2f !: horizontal scale factors at f-point [m] 125 REAL(dp), PUBLIC, ALLOCATABLE, SAVE , DIMENSION(:,:) :: glamt , glamf 126 REAL(wp), PUBLIC, ALLOCATABLE, SAVE , DIMENSION(:,:) :: glamu , glamv !: longitude at t, u, v, f-points [degree] 127 REAL(dp), PUBLIC, ALLOCATABLE, SAVE , DIMENSION(:,:) :: gphit , gphif 128 REAL(wp), PUBLIC, ALLOCATABLE, SAVE , DIMENSION(:,:) :: gphiu , gphiv !: latitude at t, u, v, f-points [degree] 129 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e1t , e2t 130 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: r1_e1t, r1_e2t !: t-point horizontal scale factors [m] 131 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e1u 132 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e2u , r1_e1u, r1_e2u !: horizontal scale factors at u-point [m] 133 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e2v 134 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e1v , r1_e1v, r1_e2v !: horizontal scale factors at v-point [m] 135 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e1f 136 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: e2f 137 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: r1_e1f, r1_e2f !: horizontal scale factors at f-point [m] 131 138 ! 132 REAL(wp), PUBLIC, ALLOCATABLE, SAVE , DIMENSION(:,:) :: e1e2t , r1_e1e2t !: associated metrics at t-point 133 REAL(wp), PUBLIC, ALLOCATABLE, SAVE , DIMENSION(:,:) :: e1e2u , r1_e1e2u , e2_e1u !: associated metrics at u-point 134 REAL(wp), PUBLIC, ALLOCATABLE, SAVE , DIMENSION(:,:) :: e1e2v , r1_e1e2v , e1_e2v !: associated metrics at v-point 139 REAL(dp), PUBLIC, ALLOCATABLE, SAVE , DIMENSION(:,:) :: e1e2t 140 REAL(dp), PUBLIC, ALLOCATABLE, SAVE , DIMENSION(:,:) :: r1_e1e2t !: associated metrics at t-point 141 REAL(wp), PUBLIC, ALLOCATABLE, SAVE , DIMENSION(:,:) :: e1e2u , e2_e1u, r1_e1e2u !: associated metrics at u-point 142 REAL(wp), PUBLIC, ALLOCATABLE, SAVE , DIMENSION(:,:) :: e1e2v , e1_e2v, r1_e1e2v !: associated metrics at v-point 135 143 REAL(wp), PUBLIC, ALLOCATABLE, SAVE , DIMENSION(:,:) :: e1e2f , r1_e1e2f !: associated metrics at f-point 136 144 ! … … 155 163 LOGICAL, PUBLIC :: ln_isfcav !: presence of ISF 156 164 ! ! reference scale factors 157 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e3t_0 !: t- vert. scale factor [m]165 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e3t_0 !: t- vert. scale factor [m] 158 166 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e3u_0 !: u- vert. scale factor [m] 159 167 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e3v_0 !: v- vert. scale factor [m] … … 162 170 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e3uw_0 !: uw-vert. scale factor [m] 163 171 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e3vw_0 !: vw-vert. scale factor [m] 164 165 ! ! time-dependent scale factors (domvvl)166 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: e3 t, e3u, e3v, e3w, e3uw, e3vw !: vert. scale factor [m]172 ! ! time-dependent scale factors 173 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: e3t 174 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: e3u, e3v, e3w, e3uw, e3vw !: vert. scale factor [m] 167 175 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e3f !: F-point vert. scale factor [m] 168 176 … … 173 181 174 182 ! ! reference depths of cells 175 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gdept_0 !: t- depth [m] 176 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gdepw_0 !: w- depth [m] 177 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gde3w_0 !: w- depth (sum of e3w) [m] 183 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gdept_0 !: t- depth [m] 184 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gdepw_0 !: w- depth [m] 185 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gde3w_0 !: w- depth (sum of e3w) [m] 186 ! ! time-dependent depths of cells 187 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: gdept 188 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: gdepw 189 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gde3w 178 190 179 ! ! time-dependent depths of cells (domvvl)180 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: gdept, gdepw181 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gde3w182 183 191 ! ! reference heights of ocean water column and its inverse 184 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ht_0, r1_ht_0 !: t-depth [m] and [1/m] 192 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ht_0 193 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: r1_ht_0 !: t-depth [m] and [1/m] 185 194 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hu_0, r1_hu_0 !: u-depth [m] and [1/m] 186 195 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hv_0, r1_hv_0 !: v-depth [m] and [1/m] … … 234 243 INTEGER , PUBLIC :: nsec_monday !: seconds between 00h of the last Monday and half of the current time step 235 244 INTEGER , PUBLIC :: nsec_day !: seconds between 00h of the current day and half of the current time step 236 REAL( wp), PUBLIC :: fjulday !: current julian day237 REAL( wp), PUBLIC :: fjulstartyear !: first day of the current year in julian days245 REAL(dp), PUBLIC :: fjulday !: current julian day 246 REAL(dp), PUBLIC :: fjulstartyear !: first day of the current year in julian days 238 247 REAL(wp), PUBLIC :: adatrj !: number of elapsed days since the begining of the whole simulation 239 248 ! !: (cumulative duration of previous runs that may have used different time-step size) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DOM/domain.F90
r14200 r14219 597 597 LOGICAL, DIMENSION(jpi,jpj) :: llmsk 598 598 INTEGER, DIMENSION(2) :: imil, imip, imi1, imi2, imal, imap, ima1, ima2 599 REAL( wp) :: zglmin, zglmax, zgpmin, zgpmax, ze1min, ze1max, ze2min, ze2max599 REAL(dp) :: zglmin, zglmax, zgpmin, zgpmax, ze1min, ze1max, ze2min, ze2max 600 600 !!---------------------------------------------------------------------- 601 601 ! … … 739 739 ! 740 740 ! ! lateral boundary of the global domain 741 CALL iom_rstput( 0, 0, inum, 'jperio', REAL( jperio, wp), ktype = jp_i4 )741 CALL iom_rstput( 0, 0, inum, 'jperio', REAL( jperio, dp), ktype = jp_i4 ) 742 742 ! 743 743 ! ! type of vertical coordinate 744 CALL iom_rstput( 0, 0, inum, 'ln_zco', REAL(COUNT((/ln_zco/)), wp), ktype = jp_i4 )745 CALL iom_rstput( 0, 0, inum, 'ln_zps', REAL(COUNT((/ln_zps/)), wp), ktype = jp_i4 )746 CALL iom_rstput( 0, 0, inum, 'ln_sco', REAL(COUNT((/ln_sco/)), wp), ktype = jp_i4 )744 CALL iom_rstput( 0, 0, inum, 'ln_zco', REAL(COUNT((/ln_zco/)), dp), ktype = jp_i4 ) 745 CALL iom_rstput( 0, 0, inum, 'ln_zps', REAL(COUNT((/ln_zps/)), dp), ktype = jp_i4 ) 746 CALL iom_rstput( 0, 0, inum, 'ln_sco', REAL(COUNT((/ln_sco/)), dp), ktype = jp_i4 ) 747 747 ! 748 748 ! ! ocean cavities under iceshelves 749 CALL iom_rstput( 0, 0, inum, 'ln_isfcav', REAL(COUNT((/ln_isfcav/)), wp), ktype = jp_i4 )749 CALL iom_rstput( 0, 0, inum, 'ln_isfcav', REAL(COUNT((/ln_isfcav/)), dp), ktype = jp_i4 ) 750 750 ! 751 751 ! !== horizontal mesh ! … … 789 789 ! !== wet top and bottom level ==! (caution: multiplied by ssmask) 790 790 ! 791 CALL iom_rstput( 0, 0, inum, 'top_level' , REAL( mikt, wp )*ssmask , ktype = jp_i4 ) ! nb of ocean T-points (ISF)792 CALL iom_rstput( 0, 0, inum, 'bottom_level' , REAL( mbkt, wp )*ssmask , ktype = jp_i4 ) ! nb of ocean T-points791 CALL iom_rstput( 0, 0, inum, 'top_level' , REAL( mikt, dp )*ssmask , ktype = jp_i4 ) ! nb of ocean T-points (ISF) 792 CALL iom_rstput( 0, 0, inum, 'bottom_level' , REAL( mbkt, dp )*ssmask , ktype = jp_i4 ) ! nb of ocean T-points 793 793 ! 794 794 IF( ln_sco ) THEN ! s-coordinate: store grid stiffness ratio (Not required anyway) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DOM/domhgr.F90
r13286 r14219 167 167 !! 168 168 !!---------------------------------------------------------------------- 169 REAL(wp), DIMENSION(:,:), INTENT(out) :: plamt, plamu, plamv, plamf ! longitude outputs 170 REAL(wp), DIMENSION(:,:), INTENT(out) :: pphit, pphiu, pphiv, pphif ! latitude outputs 169 REAL(dp), DIMENSION(:,:), INTENT(out) :: plamt, plamf 170 REAL(wp), DIMENSION(:,:), INTENT(out) :: plamu, plamv ! longitude outputs 171 REAL(dp), DIMENSION(:,:), INTENT(out) :: pphit, pphif 172 REAL(wp), DIMENSION(:,:), INTENT(out) :: pphiu, pphiv ! latitude outputs 171 173 INTEGER , INTENT(out) :: kff ! =1 Coriolis parameter read here, =0 otherwise 172 174 REAL(wp), DIMENSION(:,:), INTENT(out) :: pff_f, pff_t ! Coriolis factor at f-point (if found in file) 173 REAL(wp), DIMENSION(:,:), INTENT(out) :: pe1t, pe1u, pe1v, pe1f ! i-scale factors 174 REAL(wp), DIMENSION(:,:), INTENT(out) :: pe2t, pe2u, pe2v, pe2f ! j-scale factors 175 REAL(dp), DIMENSION(:,:), INTENT(out) :: pe1t, pe1u, pe1f 176 REAL(wp), DIMENSION(:,:), INTENT(out) :: pe1v ! i-scale factors 177 REAL(dp), DIMENSION(:,:), INTENT(out) :: pe2t, pe2v, pe2f 178 REAL(wp), DIMENSION(:,:), INTENT(out) :: pe2u ! j-scale factors 175 179 INTEGER , INTENT(out) :: ke1e2u_v ! =1 u- & v-surfaces read here, =0 otherwise 176 180 REAL(wp), DIMENSION(:,:), INTENT(out) :: pe1e2u, pe1e2v ! u- & v-surfaces (if found in file) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DOM/domqco.F90
r14200 r14219 57 57 !! * Substitutions 58 58 # include "do_loop_substitute.h90" 59 # include "single_precision_substitute.h90" 59 60 !!---------------------------------------------------------------------- 60 61 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 117 118 ! ! Horizontal interpolation of e3t 118 119 #if defined key_RK3 119 CALL dom_qco_r3c( ssh(:,:,Kbb), r3t(:,:,Kbb), r3u(:,:,Kbb), r3v(:,:,Kbb), r3f(:,:) )120 CALL dom_qco_r3c( ssh(:,:,Kmm), r3t(:,:,Kmm), r3u(:,:,Kmm), r3v(:,:,Kmm) )120 CALL dom_qco_r3c( CASTWP(ssh(:,:,Kbb)), r3t(:,:,Kbb), r3u(:,:,Kbb), r3v(:,:,Kbb), r3f(:,:) ) 121 CALL dom_qco_r3c( CASTWP(ssh(:,:,Kmm)), r3t(:,:,Kmm), r3u(:,:,Kmm), r3v(:,:,Kmm) ) 121 122 #else 122 CALL dom_qco_r3c( ssh(:,:,Kbb), r3t(:,:,Kbb), r3u(:,:,Kbb), r3v(:,:,Kbb) )123 CALL dom_qco_r3c( ssh(:,:,Kmm), r3t(:,:,Kmm), r3u(:,:,Kmm), r3v(:,:,Kmm), r3f(:,:) )123 CALL dom_qco_r3c( CASTWP(ssh(:,:,Kbb)), r3t(:,:,Kbb), r3u(:,:,Kbb), r3v(:,:,Kbb) ) 124 CALL dom_qco_r3c( CASTWP(ssh(:,:,Kmm)), r3t(:,:,Kmm), r3u(:,:,Kmm), r3v(:,:,Kmm), r3f(:,:) ) 124 125 #endif 125 126 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DOM/domutl.F90
r14072 r14219 22 22 23 23 INTERFACE is_tile 24 MODULE PROCEDURE is_tile_2d, is_tile_3d, is_tile_4d 24 MODULE PROCEDURE is_tile_2d_sp, is_tile_3d_sp, is_tile_4d_sp 25 MODULE PROCEDURE is_tile_2d_dp, is_tile_3d_dp, is_tile_4d_dp 25 26 END INTERFACE is_tile 26 27 … … 108 109 ! 109 110 puniq(:,:) = ztstref(:,:) ! default definition 110 CALL lbc_lnk( 'domwri', puniq, cdgrd, 1. ) ! apply boundary conditions111 CALL lbc_lnk( 'domwri', puniq, cdgrd, 1._wp ) ! apply boundary conditions 111 112 lluniq(:,:,1) = puniq(:,:) == ztstref(:,:) ! check which values have not been changed 112 113 ! … … 116 117 117 118 118 FUNCTION is_tile_2d ( pt )119 FUNCTION is_tile_2d_sp( pt ) 119 120 !! 120 REAL( wp), DIMENSION(:,:), INTENT(in) :: pt121 INTEGER :: is_tile_2d 121 REAL(sp), DIMENSION(:,:), INTENT(in) :: pt 122 INTEGER :: is_tile_2d_sp 122 123 !! 123 124 IF( ln_tile .AND. (SIZE(pt, 1) < jpi .OR. SIZE(pt, 2) < jpj) ) THEN 124 is_tile_2d = 1125 is_tile_2d_sp = 1 125 126 ELSE 126 is_tile_2d = 0127 is_tile_2d_sp = 0 127 128 ENDIF 128 END FUNCTION is_tile_2d 129 END FUNCTION is_tile_2d_sp 129 130 130 131 131 FUNCTION is_tile_3d ( pt )132 FUNCTION is_tile_3d_sp( pt ) 132 133 !! 133 REAL( wp), DIMENSION(:,:,:), INTENT(in) :: pt134 INTEGER :: is_tile_3d 134 REAL(sp), DIMENSION(:,:,:), INTENT(in) :: pt 135 INTEGER :: is_tile_3d_sp 135 136 !! 136 137 IF( ln_tile .AND. (SIZE(pt, 1) < jpi .OR. SIZE(pt, 2) < jpj) ) THEN 137 is_tile_3d = 1138 is_tile_3d_sp = 1 138 139 ELSE 139 is_tile_3d = 0140 is_tile_3d_sp = 0 140 141 ENDIF 141 END FUNCTION is_tile_3d 142 END FUNCTION is_tile_3d_sp 142 143 143 144 144 FUNCTION is_tile_4d ( pt )145 FUNCTION is_tile_4d_sp( pt ) 145 146 !! 146 REAL( wp), DIMENSION(:,:,:,:), INTENT(in) :: pt147 INTEGER :: is_tile_4d 147 REAL(sp), DIMENSION(:,:,:,:), INTENT(in) :: pt 148 INTEGER :: is_tile_4d_sp 148 149 !! 149 150 IF( ln_tile .AND. (SIZE(pt, 1) < jpi .OR. SIZE(pt, 2) < jpj) ) THEN 150 is_tile_4d = 1151 is_tile_4d_sp = 1 151 152 ELSE 152 is_tile_4d = 0153 is_tile_4d_sp = 0 153 154 ENDIF 154 END FUNCTION is_tile_4d 155 END FUNCTION is_tile_4d_sp 156 157 FUNCTION is_tile_2d_dp( pt ) 158 !! 159 REAL(dp), DIMENSION(:,:), INTENT(in) :: pt 160 INTEGER :: is_tile_2d_dp 161 !! 162 IF( ln_tile .AND. (SIZE(pt, 1) < jpi .OR. SIZE(pt, 2) < jpj) ) THEN 163 is_tile_2d_dp = 1 164 ELSE 165 is_tile_2d_dp = 0 166 ENDIF 167 END FUNCTION is_tile_2d_dp 168 169 170 FUNCTION is_tile_3d_dp( pt ) 171 !! 172 REAL(dp), DIMENSION(:,:,:), INTENT(in) :: pt 173 INTEGER :: is_tile_3d_dp 174 !! 175 IF( ln_tile .AND. (SIZE(pt, 1) < jpi .OR. SIZE(pt, 2) < jpj) ) THEN 176 is_tile_3d_dp = 1 177 ELSE 178 is_tile_3d_dp = 0 179 ENDIF 180 END FUNCTION is_tile_3d_dp 181 182 183 FUNCTION is_tile_4d_dp( pt ) 184 !! 185 REAL(dp), DIMENSION(:,:,:,:), INTENT(in) :: pt 186 INTEGER :: is_tile_4d_dp 187 !! 188 IF( ln_tile .AND. (SIZE(pt, 1) < jpi .OR. SIZE(pt, 2) < jpj) ) THEN 189 is_tile_4d_dp = 1 190 ELSE 191 is_tile_4d_dp = 0 192 ENDIF 193 END FUNCTION is_tile_4d_dp 194 155 195 156 196 !!====================================================================== -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DOM/domvvl.F90
r14200 r14219 78 78 !! * Substitutions 79 79 # include "do_loop_substitute.h90" 80 # include "single_precision_substitute.h90" 80 81 !!---------------------------------------------------------------------- 81 82 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 180 181 ! !== Set of all other vertical scale factors ==! (now and before) 181 182 ! ! Horizontal interpolation of e3t 182 CALL dom_vvl_interpol( e3t(:,:,:,Kbb), e3u(:,:,:,Kbb), 'U' ) ! from T to U183 CALL dom_vvl_interpol( e3t(:,:,:,Kmm), e3u(:,:,:,Kmm), 'U' )184 CALL dom_vvl_interpol( e3t(:,:,:,Kbb), e3v(:,:,:,Kbb), 'V' ) ! from T to V185 CALL dom_vvl_interpol( e3t(:,:,:,Kmm), e3v(:,:,:,Kmm), 'V' )183 CALL dom_vvl_interpol( CASTWP(e3t(:,:,:,Kbb)), e3u(:,:,:,Kbb), 'U' ) ! from T to U 184 CALL dom_vvl_interpol( CASTWP(e3t(:,:,:,Kmm)), e3u(:,:,:,Kmm), 'U' ) 185 CALL dom_vvl_interpol( CASTWP(e3t(:,:,:,Kbb)), e3v(:,:,:,Kbb), 'V' ) ! from T to V 186 CALL dom_vvl_interpol( CASTWP(e3t(:,:,:,Kmm)), e3v(:,:,:,Kmm), 'V' ) 186 187 CALL dom_vvl_interpol( e3u(:,:,:,Kmm), e3f(:,:,:), 'F' ) ! from U to F 187 188 ! ! Vertical interpolation of e3t,u,v 188 CALL dom_vvl_interpol( e3t(:,:,:,Kmm), e3w (:,:,:,Kmm), 'W' ) ! from T to W189 CALL dom_vvl_interpol( e3t(:,:,:,Kbb), e3w (:,:,:,Kbb), 'W' )189 CALL dom_vvl_interpol( CASTWP(e3t(:,:,:,Kmm)), e3w (:,:,:,Kmm), 'W' ) ! from T to W 190 CALL dom_vvl_interpol( CASTWP(e3t(:,:,:,Kbb)), e3w (:,:,:,Kbb), 'W' ) 190 191 CALL dom_vvl_interpol( e3u(:,:,:,Kmm), e3uw(:,:,:,Kmm), 'UW' ) ! from U to UW 191 192 CALL dom_vvl_interpol( e3u(:,:,:,Kbb), e3uw(:,:,:,Kbb), 'UW' ) … … 317 318 REAL(wp) :: z_tmin, z_tmax ! local scalars 318 319 LOGICAL :: ll_do_bclinic ! local logical 319 REAL(wp), DIMENSION(jpi,jpj) :: zht, z_scale, zwu, zwv, zhdiv 320 REAL(dp), DIMENSION(jpi,jpj) :: z_scale 321 REAL(wp), DIMENSION(jpi,jpj) :: zht, zwu, zwv, zhdiv 320 322 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: ze3t 321 323 LOGICAL , DIMENSION(:,:,:), ALLOCATABLE :: llmsk … … 542 544 ! *********************************** ! 543 545 544 CALL dom_vvl_interpol( e3t(:,:,:,Kaa), e3u(:,:,:,Kaa), 'U' )545 CALL dom_vvl_interpol( e3t(:,:,:,Kaa), e3v(:,:,:,Kaa), 'V' )546 CALL dom_vvl_interpol( CASTWP(e3t(:,:,:,Kaa)), e3u(:,:,:,Kaa), 'U' ) 547 CALL dom_vvl_interpol( CASTWP(e3t(:,:,:,Kaa)), e3v(:,:,:,Kaa), 'V' ) 546 548 547 549 ! *********************************** ! … … 629 631 630 632 ! Vertical scale factor interpolations 631 CALL dom_vvl_interpol( e3t(:,:,:,Kmm), e3w(:,:,:,Kmm), 'W' )633 CALL dom_vvl_interpol( CASTWP(e3t(:,:,:,Kmm)), e3w(:,:,:,Kmm), 'W' ) 632 634 CALL dom_vvl_interpol( e3u(:,:,:,Kmm), e3uw(:,:,:,Kmm), 'UW' ) 633 635 CALL dom_vvl_interpol( e3v(:,:,:,Kmm), e3vw(:,:,:,Kmm), 'VW' ) 634 CALL dom_vvl_interpol( e3t(:,:,:,Kbb), e3w(:,:,:,Kbb), 'W' )636 CALL dom_vvl_interpol( CASTWP(e3t(:,:,:,Kbb)), e3w(:,:,:,Kbb), 'W' ) 635 637 CALL dom_vvl_interpol( e3u(:,:,:,Kbb), e3uw(:,:,:,Kbb), 'UW' ) 636 638 CALL dom_vvl_interpol( e3v(:,:,:,Kbb), e3vw(:,:,:,Kbb), 'VW' ) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DOM/domwri.F90
r13295 r14219 75 75 CALL iom_open( TRIM(clnam), inum, ldwrt = .TRUE. ) 76 76 ! ! domain characteristics 77 CALL iom_rstput( 0, 0, inum, 'jperio', REAL( jperio, wp), ktype = jp_i4 )77 CALL iom_rstput( 0, 0, inum, 'jperio', REAL( jperio, dp), ktype = jp_i4 ) 78 78 ! ! type of vertical coordinate 79 79 IF( ln_zco ) THEN ; izco = 1 ; ELSE ; izco = 0 ; ENDIF 80 80 IF( ln_zps ) THEN ; izps = 1 ; ELSE ; izps = 0 ; ENDIF 81 81 IF( ln_sco ) THEN ; isco = 1 ; ELSE ; isco = 0 ; ENDIF 82 CALL iom_rstput( 0, 0, inum, 'ln_zco' , REAL( izco, wp), ktype = jp_i4 )83 CALL iom_rstput( 0, 0, inum, 'ln_zps' , REAL( izps, wp), ktype = jp_i4 )84 CALL iom_rstput( 0, 0, inum, 'ln_sco' , REAL( isco, wp), ktype = jp_i4 )82 CALL iom_rstput( 0, 0, inum, 'ln_zco' , REAL( izco, dp), ktype = jp_i4 ) 83 CALL iom_rstput( 0, 0, inum, 'ln_zps' , REAL( izps, dp), ktype = jp_i4 ) 84 CALL iom_rstput( 0, 0, inum, 'ln_sco' , REAL( isco, dp), ktype = jp_i4 ) 85 85 ! ! ocean cavities under iceshelves 86 86 IF( ln_isfcav ) THEN ; icav = 1 ; ELSE ; icav = 0 ; ENDIF 87 CALL iom_rstput( 0, 0, inum, 'ln_isfcav', REAL( icav, wp), ktype = jp_i4 )87 CALL iom_rstput( 0, 0, inum, 'ln_isfcav', REAL( icav, dp), ktype = jp_i4 ) 88 88 89 89 ! ! masks -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DOM/domzgr.F90
r13295 r14219 45 45 !! * Substitutions 46 46 # include "do_loop_substitute.h90" 47 # include "single_precision_substitute.h90" 47 48 !!---------------------------------------------------------------------- 48 49 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 125 126 zmsk(:,mj0(jpjglo-nn_hls):mj1(jpjglo-nn_hls) ) = 0._wp ! last line of inner global domain at 0 126 127 ENDIF 127 CALL lbc_lnk( 'usrdef_zgr', zmsk, 'T', 1. ) ! set halos128 CALL lbc_lnk( 'usrdef_zgr', zmsk, 'T', 1._wp ) ! set halos 128 129 k_top(:,:) = k_top(:,:) * NINT( zmsk(:,:) ) 129 130 ! … … 220 221 REAL(wp), DIMENSION(:) , INTENT(out) :: pe3t_1d , pe3w_1d ! 1D vertical scale factors [m] 221 222 REAL(wp), DIMENSION(:,:,:), INTENT(out) :: pdept, pdepw ! grid-point depth [m] 222 REAL(wp), DIMENSION(:,:,:), INTENT(out) :: pe3t , pe3u , pe3v , pe3f ! vertical scale factors [m] 223 REAL(dp), DIMENSION(:,:,:), INTENT(out) :: pe3t 224 REAL(wp), DIMENSION(:,:,:), INTENT(out) :: pe3u , pe3v , pe3f ! vertical scale factors [m] 223 225 REAL(wp), DIMENSION(:,:,:), INTENT(out) :: pe3w , pe3uw, pe3vw ! - - - 224 226 INTEGER , DIMENSION(:,:) , INTENT(out) :: k_top , k_bot ! first & last ocean level … … 277 279 ELSE !- depths computed from e3. scale factors 278 280 CALL e3_to_depth( pe3t_1d, pe3w_1d, pdept_1d, pdepw_1d ) ! 1D reference depth 279 CALL e3_to_depth( pe3t , pe3w , pdept , pdepw ) ! 3D depths 281 CALL e3_to_depth( CASTWP(pe3t) , pe3w , pdept , pdepw ) 280 282 IF(lwp) THEN 281 283 WRITE(numout,*) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DOM/dtatsd.F90
r14200 r14219 136 136 !! ** Action : ptsd T-S data on medl mesh and interpolated at time-step kt 137 137 !!---------------------------------------------------------------------- 138 INTEGER , INTENT(in ) :: kt ! ocean time-step139 REAL( wp), DIMENSION(A2D(nn_hls),jpk,jpts), INTENT( out) :: ptsd ! T & S data138 INTEGER , INTENT(in ) :: kt ! ocean time-step 139 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts), INTENT( out) :: ptsd ! T & S data 140 140 ! 141 141 INTEGER :: ji, jj, jk, jl, jkk ! dummy loop indicies -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DYN/dynadv.F90
r14053 r14219 66 66 INTEGER , INTENT( in ) :: kt ! ocean time-step index 67 67 INTEGER , INTENT( in ) :: Kbb, Kmm, Krhs ! ocean time level indices 68 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation68 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 69 69 !!---------------------------------------------------------------------- 70 70 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DYN/dynadv_cen2.F90
r13497 r14219 29 29 # include "do_loop_substitute.h90" 30 30 # include "domzgr_substitute.h90" 31 # include "single_precision_substitute.h90" 31 32 !!---------------------------------------------------------------------- 32 33 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 49 50 INTEGER , INTENT( in ) :: kt ! ocean time-step index 50 51 INTEGER , INTENT( in ) :: Kmm, Krhs ! ocean time level indices 51 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation52 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 52 53 ! 53 54 INTEGER :: ji, jj, jk ! dummy loop indices 54 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfu_t, zfu_f, zfu_uw, zfu 55 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfv_t, zfv_f, zfv_vw, zfv, zfw 55 REAL(dp), DIMENSION(jpi,jpj,jpk) :: zfu_t, zfu_uw 56 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfu_f, zfu 57 REAL(dp), DIMENSION(jpi,jpj,jpk) :: zfv_t, zfv_vw 58 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfv_f, zfv, zfw 56 59 !!---------------------------------------------------------------------- 57 60 ! … … 130 133 ENDIF 131 134 ! ! Control print 132 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1= puu(:,:,:,Krhs), clinfo1=' cen2 adv - Ua: ', mask1=umask, &133 & tab3d_2= pvv(:,:,:,Krhs), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' )135 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(puu(:,:,:,Krhs)), clinfo1=' cen2 adv - Ua: ', mask1=umask, & 136 & tab3d_2=CASTWP(pvv(:,:,:,Krhs)), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 134 137 ! 135 138 END SUBROUTINE dyn_adv_cen2 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DYN/dynadv_ubs.F90
r13497 r14219 35 35 # include "do_loop_substitute.h90" 36 36 # include "domzgr_substitute.h90" 37 # include "single_precision_substitute.h90" 37 38 !!---------------------------------------------------------------------- 38 39 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 71 72 INTEGER , INTENT( in ) :: kt ! ocean time-step index 72 73 INTEGER , INTENT( in ) :: Kbb, Kmm, Krhs ! ocean time level indices 73 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation74 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 74 75 ! 75 76 INTEGER :: ji, jj, jk ! dummy loop indices 76 77 REAL(wp) :: zui, zvj, zfuj, zfvi, zl_u, zl_v ! local scalars 77 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfu_t, zfu_f, zfu_uw, zfu 78 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfv_t, zfv_f, zfv_vw, zfv, zfw 78 REAL(dp), DIMENSION(jpi,jpj,jpk) :: zfu_t, zfu_uw 79 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfu_f, zfu 80 REAL(dp), DIMENSION(jpi,jpj,jpk) :: zfv_t, zfv_vw 81 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfv_f, zfv, zfw 79 82 REAL(wp), DIMENSION(jpi,jpj,jpk,2) :: zlu_uu, zlu_uv 80 83 REAL(wp), DIMENSION(jpi,jpj,jpk,2) :: zlv_vv, zlv_vu … … 221 224 ENDIF 222 225 ! ! Control print 223 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1= puu(:,:,:,Krhs), clinfo1=' ubs2 adv - Ua: ', mask1=umask, &224 & tab3d_2= pvv(:,:,:,Krhs), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' )226 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(puu(:,:,:,Krhs)), clinfo1=' ubs2 adv - Ua: ', mask1=umask, & 227 & tab3d_2=CASTWP(pvv(:,:,:,Krhs)), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 225 228 ! 226 229 END SUBROUTINE dyn_adv_ubs -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DYN/dynatf.F90
r14200 r14219 60 60 PUBLIC dyn_atf ! routine called by step.F90 61 61 62 # include "single_precision_substitute.h90" 62 63 #if defined key_qco || defined key_linssh 63 64 !!---------------------------------------------------------------------- … … 71 72 INTEGER , INTENT(in ) :: kt ! ocean time-step index 72 73 INTEGER , INTENT(in ) :: Kbb, Kmm, Kaa ! before and after time level indices 73 REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! velocities to be time filtered 74 REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: pe3t, pe3u, pe3v ! scale factors to be time filtered 74 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! velocities to be time filtered 75 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: pe3t 76 REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: pe3u, pe3v ! scale factors to be time filtered 75 77 76 78 WRITE(*,*) 'dyn_atf: You should not have seen this print! error?', kt … … 116 118 INTEGER , INTENT(in ) :: kt ! ocean time-step index 117 119 INTEGER , INTENT(in ) :: Kbb, Kmm, Kaa ! before and after time level indices 118 REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! velocities to be time filtered 119 REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: pe3t, pe3u, pe3v ! scale factors to be time filtered 120 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! velocities to be time filtered 121 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: pe3t 122 REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: pe3u, pe3v ! scale factors to be time filtered 120 123 ! 121 124 INTEGER :: ji, jj, jk ! dummy loop indices 122 REAL(wp) :: zue3a, zue3n, zue3b, zcoef ! local scalars 125 REAL(dp) :: zcoef 126 REAL(wp) :: zue3a, zue3n, zue3b ! local scalars 123 127 REAL(wp) :: zve3a, zve3n, zve3b, z1_2dt ! - - 124 128 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zue, zve, zwfld 125 129 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zutau, zvtau 126 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ze3t_f, ze3u_f, ze3v_f, zua, zva 130 REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) :: ze3t_f 131 REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) :: zua, zva 132 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ze3u_f, ze3v_f 127 133 !!---------------------------------------------------------------------- 128 134 ! … … 229 235 ! to manage rnf, isf and possibly in the futur icb, tide water glacier (...) 230 236 ! ...(kt, coef, ktop, kbot, hz, fwf_b, fwf) 231 IF ( ln_isf ) CALL isf_dynatf( kt, Kmm, ze3t_f, rn_atfp * rn_Dt)237 IF ( ln_isf ) CALL isf_dynatf( kt, Kmm, ze3t_f, CASTWP(rn_atfp * rn_Dt) ) 232 238 ! 233 239 pe3t(:,:,1:jpkm1,Kmm) = ze3t_f(:,:,1:jpkm1) ! filtered scale factor at T-points … … 235 241 IF( ln_dynadv_vec ) THEN ! Asselin filter applied on velocity 236 242 ! Before filtered scale factor at (u/v)-points 237 CALL dom_vvl_interpol( pe3t(:,:,:,Kmm), pe3u(:,:,:,Kmm), 'U' )238 CALL dom_vvl_interpol( pe3t(:,:,:,Kmm), pe3v(:,:,:,Kmm), 'V' )243 CALL dom_vvl_interpol( CASTWP(pe3t(:,:,:,Kmm)), pe3u(:,:,:,Kmm), 'U' ) 244 CALL dom_vvl_interpol( CASTWP(pe3t(:,:,:,Kmm)), pe3v(:,:,:,Kmm), 'V' ) 239 245 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 240 246 puu(ji,jj,jk,Kmm) = puu(ji,jj,jk,Kmm) + rn_atfp * ( puu(ji,jj,jk,Kbb) - 2._wp * puu(ji,jj,jk,Kmm) + puu(ji,jj,jk,Kaa) ) … … 246 252 ALLOCATE( ze3u_f(jpi,jpj,jpk) , ze3v_f(jpi,jpj,jpk) ) 247 253 ! Now filtered scale factor at (u/v)-points stored in ze3u_f, ze3v_f 248 CALL dom_vvl_interpol( pe3t(:,:,:,Kmm), ze3u_f, 'U' )249 CALL dom_vvl_interpol( pe3t(:,:,:,Kmm), ze3v_f, 'V' )254 CALL dom_vvl_interpol( CASTWP(pe3t(:,:,:,Kmm)), ze3u_f, 'U' ) 255 CALL dom_vvl_interpol( CASTWP(pe3t(:,:,:,Kmm)), ze3v_f, 'V' ) 250 256 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 251 257 zue3a = pe3u(ji,jj,jk,Kaa) * puu(ji,jj,jk,Kaa) … … 328 334 IF ( ln_drgice_imp.OR.ln_isfcav ) THEN 329 335 ALLOCATE(zutau(jpi,jpj)) 336 zutau(:,:) = 0._wp 330 337 DO_2D( 0, 0, 0, 0 ) 331 338 jk = miku(ji,jj) … … 342 349 IF ( ln_drgice_imp.OR.ln_isfcav ) THEN 343 350 ALLOCATE(zvtau(jpi,jpj)) 351 zvtau(:,:) = 0._wp 344 352 DO_2D( 0, 0, 0, 0 ) 345 353 jk = mikv(ji,jj) … … 353 361 ENDIF 354 362 ! 355 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1= puu(:,:,:,Kaa), clinfo1=' nxt - puu(:,:,:,Kaa): ', mask1=umask, &356 & tab3d_2= pvv(:,:,:,Kaa), clinfo2=' pvv(:,:,:,Kaa): ' , mask2=vmask )357 ! 363 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(puu(:,:,:,Kaa)), clinfo1=' nxt - puu(:,:,:,Kaa): ', mask1=umask, & 364 & tab3d_2=CASTWP(pvv(:,:,:,Kaa)), clinfo2=' pvv(:,:,:,Kaa): ' , mask2=vmask ) 365 ! 358 366 IF( ln_dynspg_ts ) DEALLOCATE( zue, zve ) 359 367 IF( l_trddyn ) DEALLOCATE( zua, zva ) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DYN/dynatf_qco.F90
r14200 r14219 59 59 # include "do_loop_substitute.h90" 60 60 # include "domzgr_substitute.h90" 61 # include "single_precision_substitute.h90" 61 62 !!---------------------------------------------------------------------- 62 63 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 94 95 INTEGER , INTENT(in ) :: kt ! ocean time-step index 95 96 INTEGER , INTENT(in ) :: Kbb, Kmm, Kaa ! before and after time level indices 96 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! velocities to be time filtered97 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! velocities to be time filtered 97 98 ! 98 99 INTEGER :: ji, jj, jk ! dummy loop indices … … 100 101 REAL(wp) :: zve3a, zve3n, zve3b, z1_2dt ! - - 101 102 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zue, zve 102 REAL( wp), ALLOCATABLE, DIMENSION(:,:,:) :: zua, zva103 REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) :: zua, zva 103 104 !!---------------------------------------------------------------------- 104 105 ! … … 239 240 ENDIF 240 241 ! 241 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1= puu(:,:,:,Kaa), clinfo1=' nxt - puu(:,:,:,Kaa): ', mask1=umask, &242 & tab3d_2= pvv(:,:,:,Kaa), clinfo2=' pvv(:,:,:,Kaa): ' , mask2=vmask )242 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(puu(:,:,:,Kaa)), clinfo1=' nxt - puu(:,:,:,Kaa): ', mask1=umask, & 243 & tab3d_2=CASTWP(pvv(:,:,:,Kaa)), clinfo2=' pvv(:,:,:,Kaa): ' , mask2=vmask ) 243 244 ! 244 245 IF( ln_dynspg_ts ) DEALLOCATE( zue, zve ) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DYN/dynhpg.F90
r14200 r14219 81 81 # include "do_loop_substitute.h90" 82 82 # include "domzgr_substitute.h90" 83 # include "single_precision_substitute.h90" 83 84 84 85 !!---------------------------------------------------------------------- … … 101 102 INTEGER , INTENT( in ) :: kt ! ocean time-step index 102 103 INTEGER , INTENT( in ) :: Kmm, Krhs ! ocean time level indices 103 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation104 ! 105 REAL( wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdu, ztrdv104 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 105 ! 106 REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdu, ztrdv 106 107 !!---------------------------------------------------------------------- 107 108 ! … … 130 131 ENDIF 131 132 ! 132 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1= puu(:,:,:,Krhs), clinfo1=' hpg - Ua: ', mask1=umask, &133 & tab3d_2= pvv(:,:,:,Krhs), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' )133 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(puu(:,:,:,Krhs)), clinfo1=' hpg - Ua: ', mask1=umask, & 134 & tab3d_2=CASTWP(pvv(:,:,:,Krhs)), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 134 135 ! 135 136 IF( ln_timing ) CALL timing_stop('dyn_hpg') … … 262 263 INTEGER , INTENT( in ) :: kt ! ocean time-step index 263 264 INTEGER , INTENT( in ) :: Kmm, Krhs ! ocean time level indices 264 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation265 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 265 266 ! 266 267 INTEGER :: ji, jj, jk ! dummy loop indices … … 313 314 INTEGER , INTENT( in ) :: kt ! ocean time-step index 314 315 INTEGER , INTENT( in ) :: Kmm, Krhs ! ocean time level indices 315 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation316 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 316 317 !! 317 318 INTEGER :: ji, jj, jk ! dummy loop indices … … 405 406 INTEGER , INTENT( in ) :: kt ! ocean time-step index 406 407 INTEGER , INTENT( in ) :: Kmm, Krhs ! ocean time level indices 407 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation408 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 408 409 !! 409 410 INTEGER :: ji, jj, jk, jii, jjj ! dummy loop indices … … 542 543 INTEGER , INTENT( in ) :: kt ! ocean time-step index 543 544 INTEGER , INTENT( in ) :: Kmm, Krhs ! ocean time level indices 544 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation545 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 545 546 !! 546 547 INTEGER :: ji, jj, jk ! dummy loop indices … … 631 632 INTEGER , INTENT( in ) :: kt ! ocean time-step index 632 633 INTEGER , INTENT( in ) :: Kmm, Krhs ! ocean time level indices 633 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation634 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 634 635 !! 635 636 INTEGER :: ji, jj, jk ! dummy loop indices … … 793 794 END_3D 794 795 795 CALL lbc_lnk_multi( 'dynhpg', zdrhox, 'U', 1. , zdzx, 'U', 1., zdrhoy, 'V', 1., zdzy, 'V', 1.)796 CALL lbc_lnk_multi( 'dynhpg', zdrhox, 'U', 1._wp, zdzx, 'U', 1._wp, zdrhoy, 'V', 1._wp, zdzy, 'V', 1._wp ) 796 797 797 798 !------------------------------------------------------------------------- … … 963 964 INTEGER , INTENT( in ) :: kt ! ocean time-step index 964 965 INTEGER , INTENT( in ) :: Kmm, Krhs ! ocean time level indices 965 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation966 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 966 967 !! 967 968 INTEGER :: ji, jj, jk, jkk ! dummy loop indices … … 990 991 zcoef0 = - grav 991 992 znad = 1._wp 992 IF( ln_linssh ) znad = 1._wp 993 ! 994 ! --------------- 995 ! Surface pressure gradient to be removed 996 ! --------------- 997 DO_2D( 0, 0, 0, 0 ) 998 zpgu(ji,jj) = - grav * ( ssh(ji+1,jj,Kmm) - ssh(ji,jj,Kmm) ) * r1_e1u(ji,jj) 999 zpgv(ji,jj) = - grav * ( ssh(ji,jj+1,Kmm) - ssh(ji,jj,Kmm) ) * r1_e2v(ji,jj) 1000 END_2D 1001 ! 993 IF( ln_linssh ) znad = 0._wp 994 1002 995 IF( ln_wd_il ) THEN 1003 996 ALLOCATE( zcpx(jpi,jpj) , zcpy(jpi,jpj) ) … … 1057 1050 ELSEIF( jk < jpkm1 ) THEN 1058 1051 DO jkk = jk+1, jpk 1059 zrhh(ji,jj,jkk) = interp1(gde3w(ji,jj,jkk ), gde3w(ji,jj,jkk-1), & 1060 & gde3w(ji,jj,jkk-2), zrhh (ji,jj,jkk-1), zrhh(ji,jj,jkk-2)) 1052 zrhh(ji,jj,jkk) = interp1(CASTWP(gde3w(ji,jj,jkk )), CASTWP(gde3w(ji,jj,jkk-1)), & 1053 & CASTWP(gde3w(ji,jj,jkk-2)), zrhh (ji,jj,jkk-1), zrhh(ji,jj,jkk-2)) 1054 1061 1055 END DO 1062 1056 ENDIF -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DYN/dynkeg.F90
r13497 r14219 37 37 !! * Substitutions 38 38 # include "do_loop_substitute.h90" 39 # include "single_precision_substitute.h90" 39 40 !!---------------------------------------------------------------------- 40 41 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 74 75 INTEGER , INTENT( in ) :: kscheme ! =0/1 type of KEG scheme 75 76 INTEGER , INTENT( in ) :: Kmm, Krhs ! ocean time level indices 76 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation77 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 77 78 ! 78 79 INTEGER :: ji, jj, jk ! dummy loop indices 79 80 REAL(wp) :: zu, zv ! local scalars 80 81 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zhke 81 REAL( wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdu, ztrdv82 REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdu, ztrdv 82 83 !!---------------------------------------------------------------------- 83 84 ! … … 137 138 ENDIF 138 139 ! 139 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1= puu(:,:,:,Krhs), clinfo1=' keg - Ua: ', mask1=umask, &140 & tab3d_2= pvv(:,:,:,Krhs), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' )140 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(puu(:,:,:,Krhs)), clinfo1=' keg - Ua: ', mask1=umask, & 141 & tab3d_2=CASTWP(pvv(:,:,:,Krhs)), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 141 142 ! 142 143 IF( ln_timing ) CALL timing_stop('dyn_keg') -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DYN/dynldf.F90
r12377 r14219 34 34 PUBLIC dyn_ldf_init ! called by opa module 35 35 36 # include "single_precision_substitute.h90" 36 37 !!---------------------------------------------------------------------- 37 38 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 49 50 INTEGER , INTENT( in ) :: kt ! ocean time-step index 50 51 INTEGER , INTENT( in ) :: Kbb, Kmm, Krhs ! ocean time level indices 51 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation52 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 52 53 ! 53 REAL( wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdu, ztrdv54 REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdu, ztrdv 54 55 !!---------------------------------------------------------------------- 55 56 ! … … 65 66 ! 66 67 CASE ( np_lap ) 67 CALL dyn_ldf_lap( kt, Kbb, Kmm, puu(:,:,:,Kbb), pvv(:,:,:,Kbb), puu(:,:,:,Krhs), pvv(:,:,:,Krhs), 1 ) ! iso-level laplacian68 CALL dyn_ldf_lap( kt, Kbb, Kmm, CASTWP(puu(:,:,:,Kbb)), CASTWP(pvv(:,:,:,Kbb)), puu(:,:,:,Krhs), pvv(:,:,:,Krhs), 1 ) 68 69 CASE ( np_lap_i ) 69 70 CALL dyn_ldf_iso( kt, Kbb, Kmm, puu, pvv, Krhs ) ! rotated laplacian 70 71 CASE ( np_blp ) 71 CALL dyn_ldf_blp( kt, Kbb, Kmm, puu(:,:,:,Kbb), pvv(:,:,:,Kbb), puu(:,:,:,Krhs), pvv(:,:,:,Krhs) ) ! iso-level bi-laplacian72 CALL dyn_ldf_blp( kt, Kbb, Kmm, CASTWP(puu(:,:,:,Kbb)), CASTWP(pvv(:,:,:,Kbb)), puu(:,:,:,Krhs), pvv(:,:,:,Krhs) ) 72 73 ! 73 74 END SELECT … … 80 81 ENDIF 81 82 ! ! print sum trends (used for debugging) 82 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1= puu(:,:,:,Krhs), clinfo1=' ldf - Ua: ', mask1=umask, &83 & tab3d_2= pvv(:,:,:,Krhs), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' )83 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(puu(:,:,:,Krhs)), clinfo1=' ldf - Ua: ', mask1=umask, & 84 & tab3d_2=CASTWP(pvv(:,:,:,Krhs)), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 84 85 ! 85 86 IF( ln_timing ) CALL timing_stop('dyn_ldf') -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DYN/dynldf_iso.F90
r13497 r14219 43 43 # include "do_loop_substitute.h90" 44 44 # include "domzgr_substitute.h90" 45 # include "single_precision_substitute.h90" 45 46 !!---------------------------------------------------------------------- 46 47 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 106 107 INTEGER , INTENT( in ) :: kt ! ocean time-step index 107 108 INTEGER , INTENT( in ) :: Kbb, Kmm, Krhs ! ocean time level indices 108 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation109 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 109 110 ! 110 111 INTEGER :: ji, jj, jk ! dummy loop indices … … 281 282 282 283 ! print sum trends (used for debugging) 283 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1= puu(:,:,:,Krhs), clinfo1=' ldfh - Ua: ', mask1=umask, &284 & tab3d_2= pvv(:,:,:,Krhs), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' )284 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(puu(:,:,:,Krhs)), clinfo1=' ldfh - Ua: ', mask1=umask, & 285 & tab3d_2=CASTWP(pvv(:,:,:,Krhs)), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 285 286 286 287 … … 399 400 !!====================================================================== 400 401 END MODULE dynldf_iso 402 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DYN/dynldf_lap_blp.F90
r14053 r14219 31 31 # include "do_loop_substitute.h90" 32 32 # include "domzgr_substitute.h90" 33 # include "single_precision_substitute.h90" 33 34 !!---------------------------------------------------------------------- 34 35 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 56 57 INTEGER , INTENT(in ) :: kpass ! =1/2 first or second passage 57 58 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in ) :: pu, pv ! before velocity [m/s] 58 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu_rhs, pv_rhs ! velocity trend [m/s2]59 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu_rhs, pv_rhs ! velocity trend [m/s2] 59 60 ! 60 61 INTEGER :: ji, jj, jk ! dummy loop indices … … 169 170 INTEGER , INTENT(in ) :: Kbb, Kmm ! ocean time level indices 170 171 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in ) :: pu, pv ! before velocity fields 171 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu_rhs, pv_rhs ! momentum trend172 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu_rhs, pv_rhs ! momentum trend 172 173 ! 173 REAL( wp), DIMENSION(jpi,jpj,jpk) :: zulap, zvlap ! laplacian at u- and v-point174 REAL(dp), DIMENSION(jpi,jpj,jpk) :: zulap, zvlap ! laplacian at u- and v-point 174 175 !!---------------------------------------------------------------------- 175 176 ! … … 187 188 CALL lbc_lnk_multi( 'dynldf_lap_blp', zulap, 'U', -1.0_wp, zvlap, 'V', -1.0_wp ) ! Lateral boundary conditions 188 189 ! 189 CALL dyn_ldf_lap( kt, Kbb, Kmm, zulap, zvlap, pu_rhs, pv_rhs, 2 ) ! rotated laplacian applied to zlap (output in pt(:,:,:,:,Krhs))190 CALL dyn_ldf_lap( kt, Kbb, Kmm, CASTWP(zulap), CASTWP(zvlap), pu_rhs, pv_rhs, 2 ) ! rotated laplacian applied to zlap (output in pt(:,:,:,:,Krhs)) 190 191 ! 191 192 END SUBROUTINE dyn_ldf_blp -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DYN/dynspg.F90
r14072 r14219 50 50 !! * Substitutions 51 51 # include "do_loop_substitute.h90" 52 # include "single_precision_substitute.h90" 52 53 !!---------------------------------------------------------------------- 53 54 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 77 78 INTEGER , INTENT( in ) :: kt ! ocean time-step index 78 79 INTEGER , INTENT( in ) :: Kbb, Kmm, Krhs, Kaa ! ocean time level indices 79 REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 80 REAL(wp), DIMENSION(jpi,jpj,jpt) , INTENT(inout) :: pssh, puu_b, pvv_b ! SSH and barotropic velocities at main time levels 80 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 81 REAL(dp), DIMENSION(jpi,jpj,jpt) , INTENT(inout) :: pssh ! SSH 82 REAL(wp), DIMENSION(jpi,jpj,jpt) , INTENT(inout) :: puu_b, pvv_b !barotropic velocities at main time levels 81 83 ! 82 84 INTEGER :: ji, jj, jk ! dummy loop indices … … 84 86 REAL(wp) , DIMENSION(jpi,jpj) :: zpgu, zpgv ! 2D workspace 85 87 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zpice 86 REAL( wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdu, ztrdv88 REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdu, ztrdv 87 89 !!---------------------------------------------------------------------- 88 90 ! … … 175 177 ENDIF 176 178 ! ! print mean trends (used for debugging) 177 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1= puu(:,:,:,Krhs), clinfo1=' spg - Ua: ', mask1=umask, &178 & tab3d_2= pvv(:,:,:,Krhs), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' )179 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(puu(:,:,:,Krhs)), clinfo1=' spg - Ua: ', mask1=umask, & 180 & tab3d_2=CASTWP(pvv(:,:,:,Krhs)), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 179 181 ! 180 182 IF( ln_timing ) CALL timing_stop('dyn_spg') -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DYN/dynspg_exp.F90
r14064 r14219 57 57 INTEGER , INTENT( in ) :: kt ! ocean time-step index 58 58 INTEGER , INTENT( in ) :: Kmm, Krhs ! ocean time level indices 59 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation59 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 60 60 !! 61 61 INTEGER :: ji, jj, jk ! dummy loop indices -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DYN/dynspg_ts.F90
r14064 r14219 75 75 REAL(wp),SAVE :: rDt_e ! Barotropic time step 76 76 ! 77 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: wgtbtp1, wgtbtp2 ! 1st & 2nd weights used in time filtering of barotropic fields 77 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:) :: wgtbtp1 ! 1st 78 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: wgtbtp2 ! & 2nd weights used in time filtering of barotropic fields 78 79 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zwz ! ff_f/h at F points 79 80 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: ftnw, ftne ! triad of coriolis parameter … … 88 89 # include "do_loop_substitute.h90" 89 90 # include "domzgr_substitute.h90" 91 # include "single_precision_substitute.h90" 90 92 !!---------------------------------------------------------------------- 91 93 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 144 146 INTEGER , INTENT( in ) :: kt ! ocean time-step index 145 147 INTEGER , INTENT( in ) :: Kbb, Kmm, Krhs, Kaa ! ocean time level indices 146 REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 147 REAL(wp), DIMENSION(jpi,jpj,jpt) , INTENT(inout) :: pssh, puu_b, pvv_b ! SSH and barotropic velocities at main time levels 148 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 149 REAL(dp), DIMENSION(jpi,jpj,jpt) , INTENT(inout) :: pssh ! SSH 150 REAL(wp), DIMENSION(jpi,jpj,jpt) , INTENT(inout) :: puu_b, pvv_b ! barotropic velocities at main time levels 148 151 ! 149 152 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 152 155 INTEGER :: noffset ! local integers : time offset for bdy update 153 156 REAL(wp) :: r1_Dt_b, z1_hu, z1_hv ! local scalars 154 REAL(wp) :: za0, za1, za2, za3 ! - - 157 REAL(dp) :: za1 158 REAL(wp) :: za0, za2, za3 ! - - 155 159 REAL(wp) :: zztmp, zldg ! - - 156 REAL(wp) :: zhu_bck, zhv_bck, zhdiv ! - - 160 REAL(dp) :: zhdiv 161 REAL(wp) :: zhu_bck, zhv_bck ! - - 157 162 REAL(wp) :: zun_save, zvn_save ! - - 158 REAL(wp), DIMENSION(jpi,jpj) :: zu_trd, zu_frc, zu_spg, zssh_frc 163 REAL(dp), DIMENSION(jpi,jpj) :: zssh_frc 164 REAL(wp), DIMENSION(jpi,jpj) :: zu_trd, zu_frc, zu_spg 159 165 REAL(wp), DIMENSION(jpi,jpj) :: zv_trd, zv_frc, zv_spg 160 166 REAL(wp), DIMENSION(jpi,jpj) :: zsshu_a, zhup2_e, zhtp2_e … … 274 280 ! != Add bottom stress contribution from baroclinic velocities =! 275 281 ! ! ----------------------------------------------------------- ! 276 CALL dyn_drg_init( Kbb, Kmm, puu, pvv, puu_b ,pvv_b, zu_frc, zv_frc, zCdU_u, zCdU_v ) ! also provide the barotropic drag coefficients282 CALL dyn_drg_init( Kbb, Kmm, CASTWP(puu), CASTWP(pvv), puu_b ,pvv_b, zu_frc, zv_frc, zCdU_u, zCdU_v ) ! also provide the barotropic drag coefficients 277 283 ! 278 284 ! != Add atmospheric pressure forcing =! … … 520 526 END_2D 521 527 ! 528 #if defined key_single 529 CALL lbc_lnk ( 'dynspg_ts', ssha_e, 'T', 1._wp ) 530 CALL lbc_lnk_multi( 'dynspg_ts', zhU, 'U', -1._wp, zhV, 'V', -1._wp ) 531 #else 522 532 CALL lbc_lnk_multi( 'dynspg_ts', ssha_e, 'T', 1._wp, zhU, 'U', -1._wp, zhV, 'V', -1._wp ) 533 #endif 523 534 ! 524 535 ! Duplicate sea level across open boundaries (this is only cosmetic if linssh=T) … … 680 691 ENDIF 681 692 ! ! open boundaries 682 IF( ln_bdy ) CALL bdy_dyn2d( jn, ua_e, va_e, un_e, vn_e, hur_e, hvr_e, ssha_e)693 IF( ln_bdy ) CALL bdy_dyn2d( jn, ua_e, va_e, un_e, vn_e, hur_e, hvr_e, CASTWP(ssha_e) ) 683 694 #if defined key_agrif 684 695 IF( .NOT.Agrif_Root() ) CALL agrif_dyn_ts( jn ) ! Agrif … … 840 851 LOGICAL, INTENT(in) :: ll_fw ! forward time splitting =.true. 841 852 INTEGER, INTENT(inout) :: jpit ! cycle length 842 REAL( wp), DIMENSION(3*nn_e), INTENT(inout) :: zwgt1, &! Primary weights843 853 REAL(dp), DIMENSION(3*nn_e), INTENT(inout) :: zwgt1 ! Primary weights 854 REAL(wp), DIMENSION(3*nn_e), INTENT(inout) :: zwgt2 ! Secondary weights 844 855 845 856 INTEGER :: jic, jn, ji ! temporary integers 846 REAL(wp) :: za1, za2 857 REAL(dp) :: za1 858 REAL(wp) :: za2 847 859 !!---------------------------------------------------------------------- 848 860 … … 1441 1453 INTEGER ,INTENT(in ) :: jn ! index of sub time step 1442 1454 LOGICAL ,INTENT(in ) :: ll_init ! 1443 REAL(wp),INTENT( out) :: za0, za1, za2, za3 ! Half-step back interpolation coefficient 1455 REAL(dp),INTENT( out) :: za1 1456 REAL(wp),INTENT( out) :: za0, za2, za3 ! Half-step back interpolation coefficient 1444 1457 ! 1445 1458 REAL(wp) :: zepsilon, zgamma ! - - -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DYN/dynvor.F90
r14200 r14219 96 96 # include "do_loop_substitute.h90" 97 97 # include "domzgr_substitute.h90" 98 # include "single_precision_substitute.h90" 98 99 99 100 !!---------------------------------------------------------------------- … … 116 117 INTEGER , INTENT( in ) :: kt ! ocean time-step index 117 118 INTEGER , INTENT( in ) :: Kmm, Krhs ! ocean time level indices 118 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocity field and RHS of momentum equation119 ! 120 REAL( wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdu, ztrdv119 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocity field and RHS of momentum equation 120 ! 121 REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdu, ztrdv 121 122 !!---------------------------------------------------------------------- 122 123 ! … … 206 207 ! 207 208 ! ! print sum trends (used for debugging) 208 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1= puu(:,:,:,Krhs), clinfo1=' vor - Ua: ', mask1=umask, &209 & tab3d_2= pvv(:,:,:,Krhs), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' )209 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(puu(:,:,:,Krhs)), clinfo1=' vor - Ua: ', mask1=umask, & 210 & tab3d_2=CASTWP(pvv(:,:,:,Krhs)), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 210 211 ! 211 212 IF( ln_timing ) CALL timing_stop('dyn_vor') … … 235 236 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 236 237 INTEGER , INTENT(in ) :: kvor ! total, planetary, relative, or metric 237 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu, pv ! now velocities238 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu_rhs, pv_rhs ! total v-trend238 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu, pv ! now velocities 239 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu_rhs, pv_rhs ! total v-trend 239 240 ! 240 241 INTEGER :: ji, jj, jk ! dummy loop indices … … 351 352 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 352 353 INTEGER , INTENT(in ) :: kvor ! total, planetary, relative, or metric 353 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu, pv ! now velocities354 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu_rhs, pv_rhs ! total v-trend354 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu, pv ! now velocities 355 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu_rhs, pv_rhs ! total v-trend 355 356 ! 356 357 INTEGER :: ji, jj, jk ! dummy loop indices … … 478 479 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 479 480 INTEGER , INTENT(in ) :: kvor ! total, planetary, relative, or metric 480 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu, pv ! now velocities481 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu_rhs, pv_rhs ! total v-trend481 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu, pv ! now velocities 482 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu_rhs, pv_rhs ! total v-trend 482 483 ! 483 484 INTEGER :: ji, jj, jk ! dummy loop indices … … 602 603 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 603 604 INTEGER , INTENT(in ) :: kvor ! total, planetary, relative, or metric 604 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu, pv ! now velocities605 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu_rhs, pv_rhs ! total v-trend605 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu, pv ! now velocities 606 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu_rhs, pv_rhs ! total v-trend 606 607 ! 607 608 INTEGER :: ji, jj, jk ! dummy loop indices … … 751 752 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 752 753 INTEGER , INTENT(in ) :: kvor ! total, planetary, relative, or metric 753 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu, pv ! now velocities754 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu_rhs, pv_rhs ! total v-trend754 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu, pv ! now velocities 755 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu_rhs, pv_rhs ! total v-trend 755 756 ! 756 757 INTEGER :: ji, jj, jk ! dummy loop indices -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DYN/dynzad.F90
r14072 r14219 31 31 # include "do_loop_substitute.h90" 32 32 # include "domzgr_substitute.h90" 33 # include "single_precision_substitute.h90" 33 34 !!---------------------------------------------------------------------- 34 35 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 56 57 INTEGER , INTENT( in ) :: kt ! ocean time-step inedx 57 58 INTEGER , INTENT( in ) :: Kmm, Krhs ! ocean time level indices 58 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation59 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 59 60 ! 60 61 INTEGER :: ji, jj, jk ! dummy loop indices … … 62 63 REAL(wp), DIMENSION(jpi,jpj) :: zww 63 64 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zwuw, zwvw 64 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: ztrdu, ztrdv65 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: ztrdu, ztrdv 65 66 !!---------------------------------------------------------------------- 66 67 ! … … 73 74 74 75 IF( l_trddyn ) THEN ! Save puu(:,:,:,Krhs) and pvv(:,:,:,Krhs) trends 75 ALLOCATE( ztrdu(jpi,jpj,jpk) , ztrdv(jpi,jpj,jpk) ) 76 ztrdu(:,:,:) = puu(:,:,:,Krhs) 77 ztrdv(:,:,:) = pvv(:,:,:,Krhs) 76 ALLOCATE( ztrdu(jpi,jpj,jpk) , ztrdv(jpi,jpj,jpk) ) 77 ztrdu(:,:,:) = puu(:,:,:,Krhs) 78 ztrdv(:,:,:) = pvv(:,:,:,Krhs) 78 79 ENDIF 79 80 … … 114 115 ENDIF 115 116 ! ! Control print 116 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1= puu(:,:,:,Krhs), clinfo1=' zad - Ua: ', mask1=umask, &117 & tab3d_2= pvv(:,:,:,Krhs), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' )117 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(puu(:,:,:,Krhs)), clinfo1=' zad - Ua: ', mask1=umask, & 118 & tab3d_2=CASTWP(pvv(:,:,:,Krhs)), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 118 119 ! 119 120 IF( ln_timing ) CALL timing_stop('dyn_zad') -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DYN/dynzdf.F90
r13497 r14219 39 39 # include "do_loop_substitute.h90" 40 40 # include "domzgr_substitute.h90" 41 # include "single_precision_substitute.h90" 41 42 !!---------------------------------------------------------------------- 42 43 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 68 69 INTEGER , INTENT( in ) :: kt ! ocean time-step index 69 70 INTEGER , INTENT( in ) :: Kbb, Kmm, Krhs, Kaa ! ocean time level indices 70 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation71 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 71 72 ! 72 73 INTEGER :: ji, jj, jk ! dummy loop indices … … 79 80 REAL(wp) :: zWus, zWvs ! - - 80 81 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zwi, zwd, zws ! 3D workspace 81 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: ztrdu, ztrdv ! - -82 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: ztrdu, ztrdv ! - - 82 83 !!--------------------------------------------------------------------- 83 84 ! … … 438 439 ENDIF 439 440 ! ! print mean trends (used for debugging) 440 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1= puu(:,:,:,Kaa), clinfo1=' zdf - Ua: ', mask1=umask, &441 & tab3d_2= pvv(:,:,:,Kaa), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' )441 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(puu(:,:,:,Kaa)), clinfo1=' zdf - Ua: ', mask1=umask, & 442 & tab3d_2=CASTWP(pvv(:,:,:,Kaa)), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 442 443 ! 443 444 IF( ln_timing ) CALL timing_stop('dyn_zdf') -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DYN/sshwzv.F90
r14200 r14219 53 53 # include "do_loop_substitute.h90" 54 54 # include "domzgr_substitute.h90" 55 # include "single_precision_substitute.h90" 56 55 57 !!---------------------------------------------------------------------- 56 58 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 76 78 INTEGER , INTENT(in ) :: kt ! time step 77 79 INTEGER , INTENT(in ) :: Kbb, Kmm, Kaa ! time level index 78 REAL( wp), DIMENSION(jpi,jpj,jpt), INTENT(inout) :: pssh ! sea-surface height80 REAL(dp), DIMENSION(jpi,jpj,jpt), INTENT(inout) :: pssh ! sea-surface height 79 81 ! 80 82 INTEGER :: jk ! dummy loop index … … 127 129 ! !------------------------------! 128 130 ! 129 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab2d_1=pssh(:,:,Kaa), clinfo1=' pssh(:,:,Kaa) - : ', mask1=tmask )131 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab2d_1=CASTWP(pssh(:,:,Kaa)), clinfo1=' pssh(:,:,Kaa) - : ', mask1=tmask ) 130 132 ! 131 133 IF( ln_timing ) CALL timing_stop('ssh_nxt') … … 278 280 INTEGER , INTENT(in ) :: kt ! ocean time-step index 279 281 INTEGER , INTENT(in ) :: Kbb, Kmm, Kaa ! ocean time level indices 280 REAL( wp), DIMENSION(jpi,jpj,jpt) , TARGET, INTENT(inout) :: pssh ! SSH field281 REAL( wp), DIMENSION(jpi,jpj ), OPTIONAL, TARGET, INTENT( out) :: pssh_f ! filtered SSH field282 ! 283 REAL( wp) :: zcoef ! local scalar284 REAL( wp), POINTER, DIMENSION(:,:) :: zssh ! pointer for filtered SSH282 REAL(dp), DIMENSION(jpi,jpj,jpt) , TARGET, INTENT(inout) :: pssh ! SSH field 283 REAL(dp), DIMENSION(jpi,jpj ), OPTIONAL, TARGET, INTENT( out) :: pssh_f ! filtered SSH field 284 ! 285 REAL(dp) :: zcoef ! local scalar 286 REAL(dp), POINTER, DIMENSION(:,:) :: zssh ! pointer for filtered SSH 285 287 !!---------------------------------------------------------------------- 286 288 ! … … 314 316 ENDIF 315 317 ! 316 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab2d_1= pssh(:,:,Kmm), clinfo1=' atf - pssh(:,:,Kmm): ', mask1=tmask )318 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab2d_1=CASTWP(pssh(:,:,Kmm)), clinfo1=' pssh(:,:,Kmm) - : ', mask1=tmask ) 317 319 ! 318 320 IF( ln_timing ) CALL timing_stop('ssh_atf') -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/DYN/wet_dry.F90
r13558 r14219 131 131 !! ** Action : - calculate flux limiter and W/D flag 132 132 !!---------------------------------------------------------------------- 133 REAL( wp), DIMENSION(:,:) , INTENT(inout) :: psshb1133 REAL(dp), DIMENSION(:,:) , INTENT(inout) :: psshb1 134 134 REAL(wp), DIMENSION(:,:) , INTENT(in ) :: psshemp 135 135 REAL(wp) , INTENT(in ) :: z2dt 136 136 INTEGER , INTENT(in ) :: Kmm ! time level index 137 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! velocity arrays137 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! velocity arrays 138 138 ! 139 139 INTEGER :: ji, jj, jk, jk1 ! dummy loop indices … … 281 281 !!---------------------------------------------------------------------- 282 282 REAL(wp) , INTENT(in ) :: rDt_e ! ocean time-step index 283 REAL(wp), DIMENSION(:,:), INTENT(inout) :: zflxu, zflxv, sshn_e, zssh_frc 283 REAL(dp), DIMENSION(:,:), INTENT(inout) :: sshn_e, zssh_frc 284 REAL(wp), DIMENSION(:,:), INTENT(inout) :: zflxu, zflxv 284 285 ! 285 286 INTEGER :: ji, jj, jk, jk1 ! dummy loop indices … … 391 392 !!============================================================================== 392 393 END MODULE wet_dry 394 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/FLO/flodom.F90
r13286 r14219 32 32 INTEGER , ALLOCATABLE, DIMENSION(:) :: idomfl, ivtest, ihtest ! - 33 33 REAL(wp), ALLOCATABLE, DIMENSION(:) :: zgifl, zgjfl, zgkfl ! distances in indexes 34 35 36 !! * Substitutions 37 # include "single_precision_substitute.h90" 34 38 35 39 !!---------------------------------------------------------------------- … … 229 233 ! A--------|-----D 230 234 ! 231 zdxab = flo_dstnce( flxx(jfl), flyy(jfl), glamf(iimfl(jfl)-1,ijmfl(jfl)-1), flyy(jfl) )232 zdyad = flo_dstnce( flxx(jfl), flyy(jfl), flxx(jfl), gphif(iimfl(jfl)-1,ijmfl(jfl)-1) )235 zdxab = flo_dstnce( flxx(jfl), flyy(jfl), CASTWP(glamf(iimfl(jfl)-1,ijmfl(jfl)-1)), flyy(jfl) ) 236 zdyad = flo_dstnce( flxx(jfl), flyy(jfl), flxx(jfl), CASTWP(gphif(iimfl(jfl)-1,ijmfl(jfl)-1)) ) 233 237 234 238 ! Translation of this distances (in meter) in indexes … … 360 364 !! ** Method : 361 365 !!---------------------------------------------------------------------- 362 REAL( wp):: &366 REAL(dp) , INTENT(in):: & 363 367 pax, pay, pbx, pby, & ! ??? 364 368 pcx, pcy, pdx, pdy, & ! ??? 365 px, py, & ! longitude and latitude366 369 ptx, pty ! ??? 367 LOGICAL :: ldinmesh ! ??? 370 REAL(wp), INTENT(in):: & 371 px, py ! longitude and latitude 372 LOGICAL , INTENT(out) :: ldinmesh ! ??? 368 373 !! 369 374 REAL(wp) :: zabt, zbct, zcdt, zdat, zabpt, zbcpt, zcdpt, zdapt -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/FLO/flowri.F90
r13286 r14219 206 206 CALL iom_put( "traj_salt" , zsal ) 207 207 CALL iom_put( "traj_dens" , zrho ) 208 CALL iom_put( "traj_group" , REAL(ngrpfl, wp) )208 CALL iom_put( "traj_group" , REAL(ngrpfl,dp) ) 209 209 #else 210 210 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/ICB/icbdyn.F90
r14030 r14219 24 24 25 25 PUBLIC icb_dyn ! routine called in icbstp.F90 module 26 27 !! * Substitutions 28 # include "single_precision_substitute.h90" 26 29 27 30 !!---------------------------------------------------------------------- -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/ICB/icbini.F90
r14030 r14219 41 41 !! * Substitutions 42 42 # include "do_loop_substitute.h90" 43 # include "single_precision_substitute.h90" 44 43 45 !!---------------------------------------------------------------------- 44 46 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 60 62 !! - setup either test icebergs or calving file 61 63 !!---------------------------------------------------------------------- 62 REAL( wp), INTENT(in) :: pdt ! iceberg time-step (rn_Dt*nn_fsbc)64 REAL(dp), INTENT(in) :: pdt ! iceberg time-step (rn_Dt*nn_fsbc) 63 65 INTEGER , INTENT(in) :: kt ! time step number 64 66 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/ICB/icbthm.F90
r14030 r14219 31 31 32 32 PUBLIC icb_thm ! routine called in icbstp.F90 module 33 34 !! * Substitutions 35 # include "single_precision_substitute.h90" 33 36 34 37 !!---------------------------------------------------------------------- … … 282 285 END DO 283 286 ! 284 berg_grid%floating_melt = REAL(cicb_melt,dp) ! kg/m2/s285 berg_grid%calving_hflx = REAL(cicb_hflx,dp)287 berg_grid%floating_melt = CASTDP(cicb_melt) ! kg/m2/s 288 berg_grid%calving_hflx = CASTDP(cicb_hflx) 286 289 ! 287 290 ! now use melt and associated heat flux in ocean (or not) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/ICB/icbtrj.F90
r14030 r14219 63 63 INTEGER :: iret, iyear, imonth, iday 64 64 INTEGER :: idg ! number of digits 65 REAL( wp) :: zfjulday, zsec65 REAL(dp) :: zfjulday, zsec 66 66 CHARACTER(len=80) :: cl_filename 67 67 CHARACTER(LEN=12) :: clfmt ! writing format -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/ICB/icbutl.F90
r14200 r14219 59 59 !! * Substitutions 60 60 # include "domzgr_substitute.h90" 61 # include "single_precision_substitute.h90" 61 62 !!---------------------------------------------------------------------- 62 63 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 182 183 ! 183 184 ! metrics and coordinates 184 IF ( PRESENT(pe1 ) ) pe1 = icb_utl_bilin_e( e1t, e1u, e1v, e1f, pi, pj ) ! scale factors185 IF ( PRESENT(pe2 ) ) pe2 = icb_utl_bilin_e( e2t, e2u, e2v, e2f, pi, pj )185 IF ( PRESENT(pe1 ) ) pe1 = icb_utl_bilin_e( CASTWP(e1t), CASTWP(e1u), e1v, CASTWP(e1f), pi, pj ) ! scale factors 186 IF ( PRESENT(pe2 ) ) pe2 = icb_utl_bilin_e( CASTWP(e2t), e2u, CASTWP(e2v), CASTWP(e2f), pi, pj ) 186 187 IF ( PRESENT(plon) ) plon= icb_utl_bilin_h( rlon_e, iiT, ijT, zwT, .true. ) 187 188 IF ( PRESENT(plat) ) plat= icb_utl_bilin_h( rlat_e, iiT, ijT, zwT, .false. ) … … 215 216 ! Estimate SSH gradient in i- and j-direction (centred evaluation) 216 217 IF ( PRESENT(pssh_i) .AND. PRESENT(pssh_j) ) THEN 217 CALL icb_utl_pos( pi+0.1 , pj , 'T', iiTp, ijTp, zwTp, zmskTp )218 CALL icb_utl_pos( pi-0.1 , pj , 'T', iiTm, ijTm, zwTm, zmskTm )218 CALL icb_utl_pos( pi+0.1_wp, pj , 'T', iiTp, ijTp, zwTp, zmskTp ) 219 CALL icb_utl_pos( pi-0.1_wp, pj , 'T', iiTm, ijTm, zwTm, zmskTm ) 219 220 ! 220 IF ( .NOT. PRESENT(pe1) ) pe1 = icb_utl_bilin_e( e1t, e1u, e1v, e1f, pi, pj )221 IF ( .NOT. PRESENT(pe1) ) pe1 = icb_utl_bilin_e( CASTWP(e1t), CASTWP(e1u), e1v, CASTWP(e1f), pi, pj ) 221 222 pssh_i = ( icb_utl_bilin_h( ssh_e, iiTp, ijTp, zwTp*zmskTp, .false. ) - & 222 223 & icb_utl_bilin_h( ssh_e, iiTm, ijTm, zwTm*zmskTm, .false. ) ) / ( 0.2_wp * pe1 ) 223 224 ! 224 CALL icb_utl_pos( pi , pj+0.1 , 'T', iiTp, ijTp, zwTp, zmskTp )225 CALL icb_utl_pos( pi , pj-0.1 , 'T', iiTm, ijTm, zwTm, zmskTm )225 CALL icb_utl_pos( pi , pj+0.1_wp, 'T', iiTp, ijTp, zwTp, zmskTp ) 226 CALL icb_utl_pos( pi , pj-0.1_wp, 'T', iiTm, ijTm, zwTm, zmskTm ) 226 227 ! 227 IF ( .NOT. PRESENT(pe2) ) pe2 = icb_utl_bilin_e( e2t, e2u, e2v, e2f, pi, pj )228 IF ( .NOT. PRESENT(pe2) ) pe2 = icb_utl_bilin_e( CASTWP(e2t), e2u, CASTWP(e2v), CASTWP(e2f), pi, pj ) 228 229 pssh_j = ( icb_utl_bilin_h( ssh_e, iiTp, ijTp, zwTp*zmskTp, .false. ) - & 229 230 & icb_utl_bilin_h( ssh_e, iiTm, ijTm, zwTm*zmskTm, .false. ) ) / ( 0.2_wp * pe2 ) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/IOM/in_out_manager.F90
r14072 r14219 1 MODULE in_out_manager 1 MODULE in_out_manager 2 2 !!====================================================================== 3 3 !! *** MODULE in_out_manager *** -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/IOM/iom.F90
r14072 r14219 98 98 !! * Substitutions 99 99 # include "do_loop_substitute.h90" 100 # include "single_precision_substitute.h90" 100 101 !!---------------------------------------------------------------------- 101 102 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 169 170 IF(.NOT.llrst_context) CALL set_scalar 170 171 ! 171 IF( cdname == cxios_context ) THEN172 CALL set_grid( "T", glamt, gphit, .FALSE., .FALSE. )172 IF( TRIM(cdname) == TRIM(cxios_context) ) THEN 173 CALL set_grid( "T", CASTWP(glamt), CASTWP(gphit), .FALSE., .FALSE. ) 173 174 CALL set_grid( "U", glamu, gphiu, .FALSE., .FALSE. ) 174 175 CALL set_grid( "V", glamv, gphiv, .FALSE., .FALSE. ) 175 CALL set_grid( "W", glamt, gphit, .FALSE., .FALSE. )176 CALL set_grid( "F", glamf, gphif, .FALSE., .FALSE. )177 CALL set_grid_znl( gphit)176 CALL set_grid( "W", CASTWP(glamt), CASTWP(gphit), .FALSE., .FALSE. ) 177 CALL set_grid( "F", CASTWP(glamf), CASTWP(gphif), .FALSE., .FALSE. ) 178 CALL set_grid_znl( CASTWP(gphit) ) 178 179 ! 179 180 IF( ln_cfmeta ) THEN ! Add additional grid metadata … … 181 182 CALL iom_set_domain_attr("grid_U", area = real( e1e2u(Nis0:Nie0, Njs0:Nje0), dp)) 182 183 CALL iom_set_domain_attr("grid_V", area = real( e1e2v(Nis0:Nie0, Njs0:Nje0), dp)) 183 CALL iom_set_domain_attr("grid_W", area = REAL( e1e2t(Nis0:Nie0, Njs0:Nje0), dp))184 CALL iom_set_domain_attr("grid_W", area = real( e1e2t(Nis0:Nie0, Njs0:Nje0), dp)) 184 185 CALL iom_set_domain_attr("grid_F", area = real( e1e2f(Nis0:Nie0, Njs0:Nje0), dp)) 185 CALL set_grid_bounds( "T", glamf, gphif, glamt, gphit)186 CALL set_grid_bounds( "T", CASTWP(glamf), CASTWP(gphif), CASTWP(glamt), CASTWP(gphit) ) 186 187 CALL set_grid_bounds( "U", glamv, gphiv, glamu, gphiu ) 187 188 CALL set_grid_bounds( "V", glamu, gphiu, glamv, gphiv ) 188 CALL set_grid_bounds( "W", glamf, gphif, glamt, gphit)189 CALL set_grid_bounds( "F", glamt, gphit, glamf, gphif)189 CALL set_grid_bounds( "W", CASTWP(glamf), CASTWP(gphif), CASTWP(glamt), CASTWP(gphit) ) 190 CALL set_grid_bounds( "F", CASTWP(glamt), CASTWP(gphit), CASTWP(glamf), CASTWP(gphif) ) 190 191 ENDIF 191 192 ENDIF … … 603 604 CALL xios_get_handle("domain_definition",domaingroup_hdl) 604 605 CALL xios_add_child(domaingroup_hdl, domain_hdl, "grid_N") 605 CALL set_grid("N", glamt, gphit, .TRUE., ld_rstr)606 CALL set_grid("N", CASTWP(glamt), CASTWP(gphit), .TRUE., ld_rstr) 606 607 607 608 CALL xios_get_handle("axis_definition",axisgroup_hdl) … … 1060 1061 INTEGER , INTENT(in ) , OPTIONAL :: ktime ! record number 1061 1062 CHARACTER(len=1), INTENT(in ) , OPTIONAL :: cd_type ! nature of grid-points (T, U, V, F, W) 1062 REAL( dp) , INTENT(in ) , OPTIONAL :: psgn ! -1.(1.): (not) change sign across the north fold1063 REAL(wp) , INTENT(in ) , OPTIONAL :: psgn ! -1.(1.): (not) change sign across the north fold 1063 1064 INTEGER , INTENT(in ) , OPTIONAL :: kfill ! value of kfillmode in lbc_lbk 1064 1065 INTEGER , INTENT(in ), DIMENSION(2), OPTIONAL :: kstart ! start axis position of the reading … … 1084 1085 INTEGER , INTENT(in ) , OPTIONAL :: ktime ! record number 1085 1086 CHARACTER(len=1), INTENT(in ) , OPTIONAL :: cd_type ! nature of grid-points (T, U, V, F, W) 1086 REAL( dp) , INTENT(in ) , OPTIONAL :: psgn ! -1.(1.): (not) change sign across the north fold1087 REAL(wp) , INTENT(in ) , OPTIONAL :: psgn ! -1.(1.): (not) change sign across the north fold 1087 1088 INTEGER , INTENT(in ) , OPTIONAL :: kfill ! value of kfillmode in lbc_lbk 1088 1089 INTEGER , INTENT(in ), DIMENSION(2), OPTIONAL :: kstart ! start axis position of the reading … … 1104 1105 INTEGER , INTENT(in ) , OPTIONAL :: ktime ! record number 1105 1106 CHARACTER(len=1), INTENT(in ) , OPTIONAL :: cd_type ! nature of grid-points (T, U, V, F, W) 1106 REAL( dp) , INTENT(in ) , OPTIONAL :: psgn ! -1.(1.) : (not) change sign across the north fold1107 REAL(wp) , INTENT(in ) , OPTIONAL :: psgn ! -1.(1.) : (not) change sign across the north fold 1107 1108 INTEGER , INTENT(in ) , OPTIONAL :: kfill ! value of kfillmode in lbc_lbk 1108 1109 INTEGER , INTENT(in ), DIMENSION(3), OPTIONAL :: kstart ! start axis position of the reading … … 1128 1129 INTEGER , INTENT(in ) , OPTIONAL :: ktime ! record number 1129 1130 CHARACTER(len=1), INTENT(in ) , OPTIONAL :: cd_type ! nature of grid-points (T, U, V, F, W) 1130 REAL( dp) , INTENT(in ) , OPTIONAL :: psgn ! -1.(1.) : (not) change sign across the north fold1131 REAL(wp) , INTENT(in ) , OPTIONAL :: psgn ! -1.(1.) : (not) change sign across the north fold 1131 1132 INTEGER , INTENT(in ) , OPTIONAL :: kfill ! value of kfillmode in lbc_lbk 1132 1133 INTEGER , INTENT(in ), DIMENSION(3), OPTIONAL :: kstart ! start axis position of the reading … … 1161 1162 INTEGER , INTENT(in ), OPTIONAL :: ktime ! record number 1162 1163 CHARACTER(len=1) , INTENT(in ), OPTIONAL :: cd_type ! nature of grid-points (T, U, V, F, W) 1163 REAL( dp) , INTENT(in ), OPTIONAL :: psgn ! -1.(1.) : (not) change sign across the north fold1164 REAL(wp) , INTENT(in ), OPTIONAL :: psgn ! -1.(1.) : (not) change sign across the north fold 1164 1165 INTEGER , INTENT(in ), OPTIONAL :: kfill ! value of kfillmode in lbc_lbk 1165 1166 INTEGER , DIMENSION(:) , INTENT(in ), OPTIONAL :: kstart ! start position of the reading in each axis … … 2664 2665 !! ** Purpose : send back the date corresponding to the given julian day 2665 2666 !!---------------------------------------------------------------------- 2666 REAL( wp), INTENT(in ) :: pjday ! julian day2667 REAL(dp), INTENT(in ) :: pjday ! julian day 2667 2668 LOGICAL , INTENT(in ), OPTIONAL :: ld24 ! true to force 24:00 instead of 00:00 2668 2669 LOGICAL , INTENT(in ), OPTIONAL :: ldfull ! true to get the compleate date: yyyymmdd_hh:mm:ss … … 2671 2672 CHARACTER(LEN=50) :: clfmt ! format used to write the date 2672 2673 INTEGER :: iyear, imonth, iday, ihour, iminute, isec 2673 REAL( wp) :: zsec2674 REAL(dp) :: zsec 2674 2675 LOGICAL :: ll24, llfull 2675 2676 !!---------------------------------------------------------------------- -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/IOM/prtctl.F90
r14072 r14219 310 310 WRITE(numout,*) '~~~~~~~~~~~~~' 311 311 ENDIF 312 IF( nn_ictls+nn_ictle+nn_jctls+nn_jctle == 0 ) THEN ! print control done over the default area 312 IF( nn_ictls+nn_ictle+nn_jctls+nn_jctle == 0 ) THEN ! print control done over the default area 313 313 nn_isplt = MAX(1, nn_isplt) ! number of processors following i-direction 314 314 nn_jsplt = MAX(1, nn_jsplt) ! number of processors following j-direction -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/IOM/restart.F90
r14200 r14219 48 48 # include "do_loop_substitute.h90" 49 49 # include "domzgr_substitute.h90" 50 # include "single_precision_substitute.h90" 50 51 !!---------------------------------------------------------------------- 51 52 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 328 329 zgdept(:,:,jk) = gdept(:,:,jk,Kmm) 329 330 END DO 330 CALL eos( ts(:,:,:,:,Kmm), rhd, rhop, zgdept )331 CALL eos( CASTWP(ts(:,:,:,:,Kmm)), rhd, rhop, zgdept ) 331 332 DEALLOCATE( zgdept ) 332 333 #else 333 CALL eos( ts(:,:,:,:,Kmm), rhd, rhop, gdept(:,:,:,Kmm) )334 CALL eos( CASTWP(ts(:,:,:,:,Kmm)), rhd, rhop, CASTWP(gdept(:,:,:,Kmm)) ) 334 335 #endif 335 336 ENDIF -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/ISF/isfcpl.F90
r14200 r14219 50 50 # include "do_loop_substitute.h90" 51 51 # include "domzgr_substitute.h90" 52 # include "single_precision_substitute.h90" 53 52 54 !!---------------------------------------------------------------------- 53 55 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 90 92 IF(lwp) WRITE(numout,*) ' isfcpl_init:', id 91 93 IF (id == 0) THEN 92 IF(lwp) WRITE(numout,*) ' isfcpl_init: restart variables for ice sheet coupling are missing, skip coupling for this leg ' 94 IF(lwp) WRITE(numout,*) ' isfcpl_init: restart variables for ice sheet coupling are missing, skip coupling for this leg ' 93 95 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~' 94 96 IF(lwp) WRITE(numout,*) '' … … 214 216 ssh(:,:,Kbb) = ssh(:,:,Kmm) 215 217 ! 216 IF ( ln_isfdebug ) CALL debug('isfcpl_ssh: sshn', ssh(:,:,Kmm))218 IF ( ln_isfdebug ) CALL debug('isfcpl_ssh: sshn',CASTWP(ssh(:,:,Kmm))) 217 219 ! 218 220 ! recompute the vertical scale factor, depth and water thickness … … 586 588 ENDDO 587 589 ! 588 ! global 590 ! global 589 591 CALL mpp_sum('isfcpl',nisfl ) 590 592 ! … … 592 594 ALLOCATE(zisfpts(nisfl(narea))) 593 595 ! 594 zisfpts(:) = isfcons(0,0,0,-HUGE(1.0 ), -HUGE(1.0), -HUGE(1.0), -HUGE(1.0), -HUGE(1.0), 0)596 zisfpts(:) = isfcons(0,0,0,-HUGE(1.0_wp), -HUGE(1.0_wp), -HUGE(1.0_wp), -HUGE(1.0_wp), -HUGE(1.0_wp), 0) 595 597 ! 596 598 ! start computing the correction and fill zisfpts … … 665 667 ELSE 666 668 iig =0 ; ijg =0 ; ik =0 667 zdvol=-HUGE(1.0 ) ; zdsal=-HUGE(1.0) ; zdtem=-HUGE(1.0)668 zlat =-HUGE(1.0 ) ; zlon =-HUGE(1.0)669 zdvol=-HUGE(1.0_wp) ; zdsal=-HUGE(1.0_wp) ; zdtem=-HUGE(1.0) 670 zlat =-HUGE(1.0_wp) ; zlon =-HUGE(1.0_wp) 669 671 ingb = 0 670 672 END IF -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/ISF/isfdynatf.F90
r14053 r14219 27 27 # include "do_loop_substitute.h90" 28 28 # include "domzgr_substitute.h90" 29 # include "single_precision_substitute.h90" 29 30 30 31 CONTAINS … … 39 40 INTEGER , INTENT(in ) :: kt ! ocean time step 40 41 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 41 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pe3t_f ! time filtered scale factor to be corrected42 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pe3t_f ! time filtered scale factor to be corrected 42 43 ! 43 44 REAL(wp) , INTENT(in ) :: pcoef ! rn_atfp * rn_Dt * r1_rho0 … … 68 69 !!-------------------------- IN ------------------------------------- 69 70 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 70 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pe3t_f ! time-filtered scale factor to be corrected71 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pe3t_f ! time-filtered scale factor to be corrected 71 72 INTEGER , DIMENSION(jpi,jpj) , INTENT(in ) :: ktop , kbot ! top and bottom level of tbl 72 73 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in ) :: pfrac, phtbl ! fraction of bottom cell included in tbl, tbl thickness -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/ISF/isfload.F90
r14064 r14219 28 28 # include "do_loop_substitute.h90" 29 29 # include "domzgr_substitute.h90" 30 # include "single_precision_substitute.h90" 30 31 !!---------------------------------------------------------------------- 31 32 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 85 86 ! 86 87 DO jk = 1, jpk !- compute density of the water displaced by the ice shelf 87 CALL eos( zts_top(:,:,:), gdept(:,:,jk,Kmm), zrhd(:,:,jk) )88 CALL eos( zts_top(:,:,:), CASTWP(gdept(:,:,jk,Kmm)), zrhd(:,:,jk) ) 88 89 !!st ==>> CALL eos( zts_top(:,:,:), gdept_0(:,:,jk), zrhd(:,:,jk) ) 89 90 END DO -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/ISF/isfparmlt.F90
r12489 r14219 28 28 PUBLIC isfpar_mlt 29 29 30 # include "single_precision_substitute.h90" 30 31 !!---------------------------------------------------------------------- 31 32 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 99 100 ! 1. ------------Mean freezing point 100 101 DO jk = 1,jpk 101 CALL eos_fzp( ts(:,:,jk,jp_sal,Kmm), ztfrz3d(:,:,jk), gdept(:,:,jk,Kmm))102 CALL eos_fzp(CASTWP(ts(:,:,jk,jp_sal,Kmm)), ztfrz3d(:,:,jk), CASTWP(gdept(:,:,jk,Kmm))) 102 103 END DO 103 CALL isf_tbl(Kmm, ztfrz3d, ztfrz, 'T', misfkt_par, rhisf_tbl_par, misfkb_par, rfrac_tbl_par )104 CALL isf_tbl(Kmm, CASTDP(ztfrz3d), ztfrz, 'T', misfkt_par, rhisf_tbl_par, misfkb_par, rfrac_tbl_par ) 104 105 ! 105 106 pqfwf(:,:) = - sf_isfpar_fwf(1)%fnow(:,:,1) ! fresh water flux from the isf (fwfisf <0 mean melting) … … 140 141 ! 0. ------------Mean freezing point 141 142 DO jk = 1,jpk 142 CALL eos_fzp( ts(:,:,jk,jp_sal,Kmm), ztfrz3d(:,:,jk), gdept(:,:,jk,Kmm))143 CALL eos_fzp(CASTWP(ts(:,:,jk,jp_sal,Kmm)), ztfrz3d(:,:,jk), CASTWP(gdept(:,:,jk,Kmm))) 143 144 END DO 144 CALL isf_tbl(Kmm, ztfrz3d, ztfrz, 'T', misfkt_par, rhisf_tbl_par, misfkb_par, rfrac_tbl_par )145 CALL isf_tbl(Kmm, CASTDP(ztfrz3d), ztfrz, 'T', misfkt_par, rhisf_tbl_par, misfkb_par, rfrac_tbl_par ) 145 146 ! 146 147 ! 1. ------------Mean temperature … … 193 194 ! 1. ------------Mean freezing point (needed for heat content flux) 194 195 DO jk = 1,jpk 195 CALL eos_fzp( ts(:,:,jk,jp_sal,Kmm), ztfrz3d(:,:,jk), gdept(:,:,jk,Kmm))196 CALL eos_fzp(CASTWP(ts(:,:,jk,jp_sal,Kmm)), ztfrz3d(:,:,jk), CASTWP(gdept(:,:,jk,Kmm))) 196 197 END DO 197 CALL isf_tbl(Kmm, ztfrz3d, ztfrz, 'T', misfkt_par, rhisf_tbl_par, misfkb_par, rfrac_tbl_par )198 CALL isf_tbl(Kmm, CASTDP(ztfrz3d), ztfrz, 'T', misfkt_par, rhisf_tbl_par, misfkb_par, rfrac_tbl_par ) 198 199 ! 199 200 ! 2. ------------Scale isf melt pattern with total amount from oasis -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/ISF/isfstp.F90
r14200 r14219 37 37 !! * Substitutions 38 38 # include "domzgr_substitute.h90" 39 # include "single_precision_substitute.h90" 39 40 !!---------------------------------------------------------------------- 40 41 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 89 90 CALL isf_tbl_lvl( ht(:,:), ze3t , misfkt_cav, misfkb_cav, rhisf_tbl_cav, rfrac_tbl_cav ) 90 91 #else 91 CALL isf_tbl_lvl( ht(:,:), e3t(:,:,:,Kmm), misfkt_cav, misfkb_cav, rhisf_tbl_cav, rfrac_tbl_cav )92 CALL isf_tbl_lvl( ht(:,:), CASTWP(e3t(:,:,:,Kmm)), misfkt_cav, misfkb_cav, rhisf_tbl_cav, rfrac_tbl_cav ) 92 93 #endif 93 94 ! … … 118 119 CALL isf_tbl_lvl( ht(:,:), ze3t , misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par ) 119 120 #else 120 CALL isf_tbl_lvl( ht(:,:), e3t(:,:,:,Kmm), misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par )121 CALL isf_tbl_lvl( ht(:,:), CASTWP(e3t(:,:,:,Kmm)), misfkt_par, misfkb_par, rhisf_tbl_par, rfrac_tbl_par ) 121 122 #endif 122 123 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/ISF/isftbl.F90
r13295 r14219 45 45 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 46 46 CHARACTER(len=1) , INTENT(in ) :: cd_ptin ! point of variable in/out 47 REAL( wp), DIMENSION(jpi,jpj,jpk) , INTENT(in ) :: pvarin ! 3d variable to average over the tbl47 REAL(dp), DIMENSION(jpi,jpj,jpk) , INTENT(in ) :: pvarin ! 3d variable to average over the tbl 48 48 INTEGER, DIMENSION(jpi,jpj) , INTENT(in ) :: ktop ! top level 49 49 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in ) :: phtbl ! tbl thickness … … 131 131 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in ) :: phtbl, pfrac ! fraction of bottom level to be affected by the tbl 132 132 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in ) :: pe3 ! vertical scale factor 133 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(in ) :: pvarin ! tbl property to average between ktop, kbot over phtbl133 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(in ) :: pvarin ! tbl property to average between ktop, kbot over phtbl 134 134 !!-------------------------------------------------------------------- 135 135 INTEGER :: ji,jj,jk ! loop indices -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/ISF/isfutils.F90
r13286 r14219 16 16 USE par_oce , ONLY: jpi,jpj,jpk, jpnij, Nis0, Nie0, Njs0, Nje0 ! domain size 17 17 USE dom_oce , ONLY: narea, tmask_h, tmask_i ! local domain 18 USE in_out_manager, ONLY: i8, wp, lwp, numout ! miscelenious 18 USE in_out_manager, ONLY: lwp, numout ! miscelenious 19 USE par_kind 19 20 USE lib_mpp 20 21 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/LBC/mpp_nfd_generic.h90
r13438 r14219 67 67 # define RECVROUTINE mpprecv_sp 68 68 # define MPI_TYPE MPI_REAL 69 # define HUGEVAL(x) HUGE(x /**/_sp)69 # define HUGEVAL(x) HUGE(x##_sp) 70 70 # else 71 71 # define PRECISION dp … … 73 73 # define RECVROUTINE mpprecv_dp 74 74 # define MPI_TYPE MPI_DOUBLE_PRECISION 75 # define HUGEVAL(x) HUGE(x /**/_dp)75 # define HUGEVAL(x) HUGE(x##_dp) 76 76 # endif 77 77 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/LDF/ldftra.F90
r14200 r14219 867 867 CALL iom_put( "veiv_heattr3d", zztmp * zw3d ) ! heat transport in j-direction 868 868 ! 869 IF( iom_use( 'sophteiv' ) ) CALL dia_ptr_hst( jp_tem, 'eiv', 0.5 * zw3d )869 IF( iom_use( 'sophteiv' ) ) CALL dia_ptr_hst( jp_tem, 'eiv', 0.5_wp * zw3d ) 870 870 ! 871 871 zztmp = 0.5_wp * 0.5 … … 891 891 CALL iom_put( "veiv_salttr3d", zztmp * zw3d ) ! salt transport in j-direction 892 892 ! 893 IF( iom_use( 'sopsteiv' ) ) CALL dia_ptr_hst( jp_sal, 'eiv', 0.5 * zw3d )893 IF( iom_use( 'sopsteiv' ) ) CALL dia_ptr_hst( jp_sal, 'eiv', 0.5_wp * zw3d ) 894 894 ! 895 895 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/OBS/diaobs.F90
r14056 r14219 98 98 99 99 CHARACTER(len=8), PUBLIC, DIMENSION(:), ALLOCATABLE :: cobstypesprof, cobstypessurf !: Profile & surface obs types 100 101 !! * Substitutions 102 # include "single_precision_substitute.h90" 100 103 101 104 !!---------------------------------------------------------------------- … … 687 690 & nit000, idaystp, jvar, & 688 691 & zprofvar(:,:,:,jvar), & 689 & gdept(:,:,:,Kmm), gdepw(:,:,:,Kmm), &692 & CASTWP(gdept(:,:,:,Kmm)), gdepw(:,:,:,Kmm), & 690 693 & zprofmask(:,:,:,jvar), & 691 694 & zglam(:,:,jvar), zgphi(:,:,jvar), & -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/OBS/obs_averg_h2d.F90
r12377 r14219 42 42 & obs_avg_h2d_init, & ! Set up weights for the averaging 43 43 & obs_max_fpsize ! Works out the maximum number of grid points required for the averaging 44 45 !! * Substitutions 46 # include "single_precision_substitute.h90" 44 47 45 48 !!---------------------------------------------------------------------- … … 603 606 !If the scales are specified in degrees, work out the max 604 607 !distance (metres) in x/y directions 605 CALL obs_deg2dist( jpi, jpj, glamt, gphit, &608 CALL obs_deg2dist( jpi, jpj, CASTWP(glamt), CASTWP(gphit), & 606 609 & plamscl, pphiscl, zlamscl_m, zphiscl_m ) 607 610 ELSE -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/OBS/obs_grid.F90
r13286 r14219 85 85 & cn_gridsearchfile ! file name head for grid search lookup 86 86 87 88 # include "single_precision_substitute.h90" 89 90 87 91 !!---------------------------------------------------------------------- 88 92 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 131 135 & 1, jpi, 1, jpj, & 132 136 & nproc, jpnij, & 133 & glamt, gphit, tmask, &137 & CASTWP(glamt), CASTWP(gphit), tmask, & 134 138 & kobsin, plam, pphi, & 135 139 & kobsi, kobsj, kproc ) … … 152 156 & 1, jpi, 1, jpj, & 153 157 & nproc, jpnij, & 154 & glamf, gphif, fmask, &158 & CASTWP(glamf), CASTWP(gphif), fmask, & 155 159 & kobsin, plam, pphi, & 156 160 & kobsi, kobsj, kproc ) … … 821 825 & 1, jpi, 1, jpj, & 822 826 & nproc, jpnij, & 823 & glamt, gphit, tmask, &827 & CASTWP(glamt), CASTWP(gphit), tmask, & 824 828 & nlons*nlats, lonsi, latsi, & 825 829 & ixposi, iyposi, iproci ) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/OBS/obs_oper.F90
r14056 r14219 33 33 !! * Substitutions 34 34 # include "do_loop_substitute.h90" 35 # include "single_precision_substitute.h90" 36 35 37 !!---------------------------------------------------------------------- 36 38 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 653 655 654 656 CALL obs_int_comm_2d( imaxifp, imaxjfp, isurf, kpi, kpj, & 655 & igrdi, igrdj, glamt, zglam )657 & igrdi, igrdj, CASTWP(glamt), zglam ) 656 658 CALL obs_int_comm_2d( imaxifp, imaxjfp, isurf, kpi, kpj, & 657 & igrdi, igrdj, gphit, zgphi )659 & igrdi, igrdj, CASTWP(gphit), zgphi ) 658 660 CALL obs_int_comm_2d( imaxifp, imaxjfp, isurf, kpi, kpj, & 659 661 & igrdi, igrdj, psurfmask, zmask ) … … 661 663 & igrdi, igrdj, psurf, zsurf ) 662 664 CALL obs_int_comm_2d( imaxifp+1, imaxjfp+1, isurf, kpi, kpj, & 663 & igrdip1, igrdjp1, glamf, zglamf )665 & igrdip1, igrdjp1, CASTWP(glamf), zglamf ) 664 666 CALL obs_int_comm_2d( imaxifp+1, imaxjfp+1, isurf, kpi, kpj, & 665 & igrdip1, igrdjp1, gphif, zgphif )667 & igrdip1, igrdjp1, CASTWP(gphif), zgphif ) 666 668 667 669 ! At the end of the day get interpolated means -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/OBS/obs_prep.F90
r14056 r14219 32 32 PUBLIC obs_pre_surf ! First level check and screening of surface obs 33 33 PUBLIC calc_month_len ! Calculate the number of days in the months of a year 34 35 !! * Substitutions 36 # include "single_precision_substitute.h90" 37 34 38 35 39 !!---------------------------------------------------------------------- … … 151 155 & surfdata%mi, surfdata%mj, & 152 156 & surfdata%rlam, surfdata%rphi, & 153 & glamt, gphit, &157 & CASTWP(glamt), CASTWP(gphit), & 154 158 & tmask(:,:,1), surfdata%nqc, & 155 159 & iosdsobs, ilansobs, & -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/OBS/obs_read_altbias.F90
r13286 r14219 41 41 PUBLIC obs_rea_altbias ! Read the altimeter bias 42 42 43 !! * Substitutions 44 # include "single_precision_substitute.h90" 45 46 43 47 !!---------------------------------------------------------------------- 44 48 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 162 166 163 167 CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, & 164 & igrdi, igrdj, glamt, zglam )165 CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, & 166 & igrdi, igrdj, gphit, zgphi )168 & igrdi, igrdj, CASTWP(glamt), zglam ) 169 CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, & 170 & igrdi, igrdj, CASTWP(gphit), zgphi ) 167 171 CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, & 168 172 & igrdi, igrdj, tmask(:,:,1), zmask ) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/OBS/obs_readmdt.F90
r13295 r14219 39 39 !! * Substitutions 40 40 # include "do_loop_substitute.h90" 41 # include "single_precision_substitute.h90" 42 41 43 !!---------------------------------------------------------------------- 42 44 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 135 137 END DO 136 138 137 CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, igrdi, igrdj, glamt, zglam )138 CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, igrdi, igrdj, gphit, zgphi )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 141 CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, igrdi, igrdj, mdtmask, zmask ) 140 142 CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, igrdi, igrdj, z_mdt , zmdtl ) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/OBS/obs_sstbias.F90
r13286 r14219 36 36 PRIVATE 37 37 PUBLIC obs_app_sstbias ! Read the altimeter bias 38 !! * Substitutions 39 # include "single_precision_substitute.h90" 40 38 41 CONTAINS 39 42 SUBROUTINE obs_app_sstbias( sstdata, k2dint, knumtypes, & … … 168 171 END DO 169 172 CALL obs_int_comm_2d( 2, 2, sstdata%nsurf, jpi, jpj, & 170 & igrdi, igrdj, glamt, zglam )173 & igrdi, igrdj, CASTWP(glamt), zglam ) 171 174 CALL obs_int_comm_2d( 2, 2, sstdata%nsurf, jpi, jpj, & 172 & igrdi, igrdj, gphit, zgphi )175 & igrdi, igrdj, CASTWP(gphit), zgphi ) 173 176 CALL obs_int_comm_2d( 2, 2, sstdata%nsurf, jpi, jpj, & 174 177 & igrdi, igrdj, tmask(:,:,1), zmask ) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/SBC/cpl_oasis3.F90
r14072 r14219 14 14 !! 3.6 ! 2014-11 (S. Masson) OASIS3-MCT 15 15 !!---------------------------------------------------------------------- 16 16 17 17 !!---------------------------------------------------------------------- 18 18 !! 'key_oasis3' coupled Ocean/Atmosphere via OASIS3-MCT … … 63 63 #endif 64 64 65 INTEGER :: nrcv ! total number of fields received 66 INTEGER :: nsnd ! total number of fields sent 65 INTEGER :: nrcv ! total number of fields received 66 INTEGER :: nsnd ! total number of fields sent 67 67 INTEGER :: ncplmodel ! Maximum number of models to/from which NEMO is potentialy sending/receiving data 68 INTEGER, PUBLIC, PARAMETER :: nmaxfld=6 2! Maximum number of coupling fields68 INTEGER, PUBLIC, PARAMETER :: nmaxfld=60 ! Maximum number of coupling fields 69 69 INTEGER, PUBLIC, PARAMETER :: nmaxcat=5 ! Maximum number of coupling fields 70 70 INTEGER, PUBLIC, PARAMETER :: nmaxcpl=5 ! Maximum number of coupling fields 71 71 72 72 TYPE, PUBLIC :: FLD_CPL !: Type for coupling field information 73 73 LOGICAL :: laction ! To be coupled or not 74 CHARACTER(len = 8) :: clname ! Name of the coupling field 75 CHARACTER(len = 1) :: clgrid ! Grid type 74 CHARACTER(len = 8) :: clname ! Name of the coupling field 75 CHARACTER(len = 1) :: clgrid ! Grid type 76 76 REAL(wp) :: nsgn ! Control of the sign change 77 77 INTEGER, DIMENSION(nmaxcat,nmaxcpl) :: nid ! Id of the field (no more than 9 categories and 9 extrena models) … … 98 98 !! exchange between AGCM, OGCM and COUPLER. (OASIS3 software) 99 99 !! 100 !! ** Method : OASIS3 MPI communication 100 !! ** Method : OASIS3 MPI communication 101 101 !!-------------------------------------------------------------------- 102 102 CHARACTER(len = *), INTENT(in ) :: cd_modname ! model name as set in namcouple file … … 132 132 !! exchange between AGCM, OGCM and COUPLER. (OASIS3 software) 133 133 !! 134 !! ** Method : OASIS3 MPI communication 134 !! ** Method : OASIS3 MPI communication 135 135 !!-------------------------------------------------------------------- 136 136 INTEGER, INTENT(in) :: krcv, ksnd ! Number of received and sent coupling fields … … 180 180 ! 181 181 ! ----------------------------------------------------------------- 182 ! ... Define the partition, excluding halos as we don't want them to be "seen" by oasis 182 ! ... Define the partition, excluding halos as we don't want them to be "seen" by oasis 183 183 ! ----------------------------------------------------------------- 184 184 185 185 paral(1) = 2 ! box partitioning 186 paral(2) = Ni0glo * mjg0(nn_hls) + mig0(nn_hls) ! NEMO lower left corner global offset, without halos 186 paral(2) = Ni0glo * mjg0(nn_hls) + mig0(nn_hls) ! NEMO lower left corner global offset, without halos 187 187 paral(3) = Ni_0 ! local extent in i, excluding halos 188 188 paral(4) = Nj_0 ! local extent in j, excluding halos 189 189 paral(5) = Ni0glo ! global extent in x, excluding halos 190 190 191 191 IF( sn_cfctl%l_oasout ) THEN 192 192 WRITE(numout,*) ' multiexchg: paral (1:5)', paral … … 195 195 WRITE(numout,*) ' multiexchg: Njs0, Nje0, njmpp =', Njs0, Nje0, njmpp 196 196 ENDIF 197 197 198 198 CALL oasis_def_partition ( id_part, paral, nerror, Ni0glo*Nj0glo ) ! global number of points, excluding halos 199 199 ! 200 ! ... Announce send variables. 200 ! ... Announce send variables. 201 201 ! 202 202 ssnd(:)%ncplmodel = kcplmodel … … 210 210 RETURN 211 211 ENDIF 212 212 213 213 DO jc = 1, ssnd(ji)%nct 214 214 DO jm = 1, kcplmodel … … 225 225 ENDIF 226 226 #if defined key_agrif 227 IF( agrif_fixed() /= 0 ) THEN 227 IF( agrif_fixed() /= 0 ) THEN 228 228 zclname=TRIM(Agrif_CFixed())//'_'//TRIM(zclname) 229 229 ENDIF … … 243 243 END DO 244 244 ! 245 ! ... Announce received variables. 245 ! ... Announce received variables. 246 246 ! 247 247 srcv(:)%ncplmodel = kcplmodel 248 248 ! 249 249 DO ji = 1, krcv 250 IF( srcv(ji)%laction ) THEN 251 250 IF( srcv(ji)%laction ) THEN 251 252 252 IF( srcv(ji)%nct > nmaxcat ) THEN 253 253 CALL oasis_abort ( ncomp_id, 'cpl_define', 'Number of categories of '// & … … 255 255 RETURN 256 256 ENDIF 257 257 258 258 DO jc = 1, srcv(ji)%nct 259 259 DO jm = 1, kcplmodel 260 260 261 261 IF( srcv(ji)%nct .GT. 1 ) THEN 262 262 WRITE(cli2,'(i2.2)') jc … … 270 270 ENDIF 271 271 #if defined key_agrif 272 IF( agrif_fixed() /= 0 ) THEN 272 IF( agrif_fixed() /= 0 ) THEN 273 273 zclname=TRIM(Agrif_CFixed())//'_'//TRIM(zclname) 274 274 ENDIF … … 288 288 ENDIF 289 289 END DO 290 290 291 291 !------------------------------------------------------------------ 292 292 ! End of definition phase 293 293 !------------------------------------------------------------------ 294 ! 294 ! 295 295 #if defined key_agrif 296 296 IF( agrif_fixed() == Agrif_Nb_Fine_Grids() ) THEN … … 303 303 ! 304 304 END SUBROUTINE cpl_define 305 306 305 306 307 307 SUBROUTINE cpl_snd( kid, kstep, pdata, kinfo ) 308 308 !!--------------------------------------------------------------------- … … 324 324 DO jc = 1, ssnd(kid)%nct 325 325 DO jm = 1, ssnd(kid)%ncplmodel 326 326 327 327 IF( ssnd(kid)%nid(jc,jm) /= -1 ) THEN ! exclude halos from data sent to oasis 328 328 CALL oasis_put ( ssnd(kid)%nid(jc,jm), kstep, pdata(Nis0:Nie0, Njs0:Nje0,jc), kinfo ) 329 330 IF ( sn_cfctl%l_oasout ) THEN 329 330 IF ( sn_cfctl%l_oasout ) THEN 331 331 IF ( kinfo == OASIS_Sent .OR. kinfo == OASIS_ToRest .OR. & 332 332 & kinfo == OASIS_SentOut .OR. kinfo == OASIS_ToRestOut ) THEN … … 342 342 ENDIF 343 343 ENDIF 344 344 345 345 ENDIF 346 346 347 347 ENDDO 348 348 ENDDO … … 379 379 IF( srcv(kid)%nid(jc,jm) /= -1 ) THEN 380 380 381 CALL oasis_get ( srcv(kid)%nid(jc,jm), kstep, exfld, kinfo ) 382 381 CALL oasis_get ( srcv(kid)%nid(jc,jm), kstep, exfld, kinfo ) 382 383 383 llaction = kinfo == OASIS_Recvd .OR. kinfo == OASIS_FromRest .OR. & 384 384 & kinfo == OASIS_RecvOut .OR. kinfo == OASIS_FromRestOut 385 385 386 386 IF ( sn_cfctl%l_oasout ) & 387 387 & WRITE(numout,*) "llaction, kinfo, kstep, ivarid: " , llaction, kinfo, kstep, srcv(kid)%nid(jc,jm) 388 388 389 389 IF( llaction ) THEN ! data received from oasis do not include halos 390 390 391 391 kinfo = OASIS_Rcv 392 IF( ll_1st ) THEN 392 IF( ll_1st ) THEN 393 393 pdata(Nis0:Nie0,Njs0:Nje0,jc) = exfld(:,:) * pmask(Nis0:Nie0,Njs0:Nje0,jm) 394 394 ll_1st = .FALSE. … … 397 397 & + exfld(:,:) * pmask(Nis0:Nie0,Njs0:Nje0,jm) 398 398 ENDIF 399 400 IF ( sn_cfctl%l_oasout ) THEN 399 400 IF ( sn_cfctl%l_oasout ) THEN 401 401 WRITE(numout,*) '****************' 402 402 WRITE(numout,*) 'oasis_get: Incoming ', srcv(kid)%clname … … 409 409 WRITE(numout,*) '****************' 410 410 ENDIF 411 411 412 412 ENDIF 413 413 414 414 ENDIF 415 415 416 416 ENDDO 417 417 418 418 !--- we must call lbc_lnk to fill the halos that where not received. 419 419 IF( .NOT. ll_1st ) THEN 420 CALL lbc_lnk( 'cpl_oasis3', pdata(:,:,jc), srcv(kid)%clgrid, srcv(kid)%nsgn ) 420 CALL lbc_lnk( 'cpl_oasis3', pdata(:,:,jc), srcv(kid)%clgrid, srcv(kid)%nsgn ) 421 421 ENDIF 422 422 423 423 ENDDO 424 424 ! … … 426 426 427 427 428 INTEGER FUNCTION cpl_freq( cdfieldname ) 428 INTEGER FUNCTION cpl_freq( cdfieldname ) 429 429 !!--------------------------------------------------------------------- 430 430 !! *** ROUTINE cpl_freq *** … … 491 491 DEALLOCATE( exfld ) 492 492 IF(nstop == 0) THEN 493 CALL oasis_terminate( nerror ) 493 CALL oasis_terminate( nerror ) 494 494 ELSE 495 495 CALL oasis_abort( ncomp_id, "cpl_finalize", "NEMO ABORT STOP" ) 496 ENDIF 496 ENDIF 497 497 ! 498 498 END SUBROUTINE cpl_finalize … … 544 544 WRITE(numout,*) 'oasis_enddef: Error you sould not be there...' 545 545 END SUBROUTINE oasis_enddef 546 546 547 547 SUBROUTINE oasis_put(k1,k2,p1,k3) 548 548 REAL(wp), DIMENSION(:,:), INTENT(in ) :: p1 … … 574 574 WRITE(numout,*) 'oasis_terminate: Error you sould not be there...' 575 575 END SUBROUTINE oasis_terminate 576 576 577 577 #endif 578 578 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/SBC/fldread.F90
r13546 r14219 383 383 IF( lk_c1d .AND. lmoor ) THEN 384 384 CALL iom_get( sdjf%num, jpdom_unknown, sdjf%clvar, dta_alias(2,2,:), sdjf%nrec(1,iaa) ) ! jpdom_unknown -> no lbc_lnk 385 CALL lbc_lnk( 'fldread', dta_alias(:,:,:), 'T', 1. , kfillmode = jpfillcopy )385 CALL lbc_lnk( 'fldread', dta_alias(:,:,:), 'T', 1._wp, kfillmode = jpfillcopy ) 386 386 ELSE 387 387 CALL iom_get( sdjf%num, jpdom_global, sdjf%clvar, dta_alias(:,:,:), sdjf%nrec(1,iaa), & -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/SBC/geo2ocean.F90
r13295 r14219 44 44 !! * Substitutions 45 45 # include "do_loop_substitute.h90" 46 # include "single_precision_substitute.h90" 46 47 !!---------------------------------------------------------------------- 47 48 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 73 74 IF(lwp) WRITE(numout,*) ' ~~~~~~~~ ' 74 75 ! 75 CALL angle( glamt, gphit, glamu, gphiu, glamv, gphiv, glamf, gphif) ! initialization of the transformation76 CALL angle( CASTWP(glamt), CASTWP(gphit), glamu, gphiu, glamv, gphiv, CASTWP(glamf), CASTWP(gphif) ) ! initialization of the transformation 76 77 lmust_init = .FALSE. 77 78 ENDIF … … 449 450 IF(lwp) WRITE(numout,*) ' obs_rot : geographic <--> stretched' 450 451 IF(lwp) WRITE(numout,*) ' ~~~~~~~ coordinate transformation' 451 CALL angle( glamt, gphit, glamu, gphiu, glamv, gphiv, glamf, gphif) ! initialization of the transformation452 CALL angle( CASTWP(glamt), CASTWP(gphit), glamu, gphiu, glamv, gphiv, CASTWP(glamf), CASTWP(gphif) ) ! initialization of the transformation 452 453 lmust_init = .FALSE. 453 454 ENDIF -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/SBC/sbc_phy.F90
r14110 r14219 770 770 ztaa = pTa ! first guess... 771 771 DO jq = 1, 4 772 zgamma = gamma_moist( 0.5 *(ztaa+pTs) , pqa ) !#LB: why not "0.5*(pqs+pqa)" rather then "pqa" ???772 zgamma = gamma_moist( 0.5_wp*(ztaa+pTs) , pqa ) !#LB: why not "0.5*(pqs+pqa)" rather then "pqa" ??? 773 773 ztaa = pTa - zgamma*pzu ! Absolute temp. is slightly colder... 774 774 END DO -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/SBC/sbcblk.F90
r14072 r14219 830 830 831 831 IF( ln_crt_fbk ) THEN 832 CALL lbc_lnk_multi( 'sbcblk', utau, 'U', -1. , vtau, 'V', -1., taum, 'T', -1.)832 CALL lbc_lnk_multi( 'sbcblk', utau, 'U', -1._wp, vtau, 'V', -1._wp, taum, 'T', -1._wp ) 833 833 ELSE 834 CALL lbc_lnk_multi( 'sbcblk', utau, 'U', -1. , vtau, 'V', -1.)834 CALL lbc_lnk_multi( 'sbcblk', utau, 'U', -1._wp, vtau, 'V', -1._wp ) 835 835 ENDIF 836 836 … … 1197 1197 ! --- evaporation minus precipitation --- ! 1198 1198 zsnw(:,:) = 0._wp 1199 CALL ice_var_snwblow( (1.-at_i_b(:,:)), zsnw ) ! snow distribution over ice after wind blowing1199 CALL ice_var_snwblow( 1._wp-at_i_b(:,:), zsnw ) ! snow distribution over ice after wind blowing 1200 1200 emp_oce(:,:) = ( 1._wp - at_i_b(:,:) ) * zevap(:,:) - ( tprecip(:,:) - sprecip(:,:) ) - sprecip(:,:) * (1._wp - zsnw ) 1201 1201 emp_ice(:,:) = SUM( a_i_b(:,:,:) * evap_ice(:,:,:), dim=3 ) - sprecip(:,:) * zsnw -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/SBC/sbccpl.F90
r14100 r14219 226 226 # include "do_loop_substitute.h90" 227 227 # include "domzgr_substitute.h90" 228 # include "single_precision_substitute.h90" 228 229 !!---------------------------------------------------------------------- 229 230 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 1666 1667 p_tauj(ji,jj) = zztmp2 * ( frcv(jpr_ity1)%z3(ji ,jj+1,1) + frcv(jpr_ity1)%z3(ji,jj,1) ) 1667 1668 END_2D 1668 CALL lbc_lnk_multi( 'sbccpl', p_taui, 'U', -1. , p_tauj, 'V', -1.)1669 CALL lbc_lnk_multi( 'sbccpl', p_taui, 'U', -1._wp, p_tauj, 'V', -1._wp ) 1669 1670 END SELECT 1670 1671 … … 2278 2279 ztmp1(:,:) = ts(:,:,1,jp_tem,Kmm) ! send temperature as it is (potential or conservative) -> use of l_useCT on the received part 2279 2280 ELSE 2280 ! we must send the surface potential temperature 2281 IF( l_useCT ) THEN ; ztmp1(:,:) = eos_pt_from_ct( ts(:,:,1,jp_tem,Kmm), ts(:,:,1,jp_sal,Kmm) )2281 ! we must send the surface potential temperature 2282 IF( l_useCT ) THEN ; ztmp1(:,:) = eos_pt_from_ct( CASTWP(ts(:,:,1,jp_tem,Kmm)),CASTWP(ts(:,:,1,jp_sal,Kmm)) ) 2282 2283 ELSE ; ztmp1(:,:) = ts(:,:,1,jp_tem,Kmm) 2283 2284 ENDIF … … 2713 2714 ! ! SSS 2714 2715 IF( ssnd(jps_soce )%laction ) THEN 2715 CALL cpl_snd( jps_soce , isec, RESHAPE ( ts(:,:,1,jp_sal,Kmm), (/jpi,jpj,1/) ), info )2716 CALL cpl_snd( jps_soce , isec, RESHAPE ( CASTWP(ts(:,:,1,jp_sal,Kmm)), (/jpi,jpj,1/) ), info ) 2716 2717 ENDIF 2717 2718 ! ! first T level thickness 2718 2719 IF( ssnd(jps_e3t1st )%laction ) THEN 2719 CALL cpl_snd( jps_e3t1st, isec, RESHAPE ( e3t(:,:,1,Kmm) , (/jpi,jpj,1/) ), info )2720 CALL cpl_snd( jps_e3t1st, isec, RESHAPE ( CASTWP(e3t(:,:,1,Kmm)) , (/jpi,jpj,1/) ), info ) 2720 2721 ENDIF 2721 2722 ! ! Qsr fraction … … 2740 2741 ! ! ------------------------- ! 2741 2742 ! needed by Met Office 2742 CALL eos_fzp( ts(:,:,1,jp_sal,Kmm), sstfrz)2743 CALL eos_fzp(CASTWP(ts(:,:,1,jp_sal,Kmm)), sstfrz) 2743 2744 ztmp1(:,:) = sstfrz(:,:) + rt0 2744 2745 IF( ssnd(jps_sstfrz)%laction ) CALL cpl_snd( jps_sstfrz, isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/SBC/sbcflx.F90
r14072 r14219 35 35 INTEGER , PARAMETER :: jp_emp = 5 ! index of evaporation-precipation file 36 36 !!INTEGER , PARAMETER :: jp_sfx = 6 ! index of salt flux flux 37 INTEGER , PARAMETER :: jpfld = 5 !! 6 ! maximum number of files to read 37 INTEGER , PARAMETER :: jpfld = 5 !! 6 ! maximum number of files to read 38 38 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf ! structure of input fields (file informations, fields read) 39 39 … … 50 50 !!--------------------------------------------------------------------- 51 51 !! *** ROUTINE sbc_flx *** 52 !! 52 !! 53 53 !! ** Purpose : provide at each time step the surface ocean fluxes 54 !! (momentum, heat, freshwater and runoff) 54 !! (momentum, heat, freshwater and runoff) 55 55 !! 56 56 !! ** Method : - READ each fluxes in NetCDF files: … … 91 91 !!--------------------------------------------------------------------- 92 92 ! 93 IF( kt == nit000 ) THEN ! First call kt=nit000 93 IF( kt == nit000 ) THEN ! First call kt=nit000 94 94 ! set file information 95 95 READ ( numnam_ref, namsbc_flx, IOSTAT = ios, ERR = 901) … … 98 98 READ ( numnam_cfg, namsbc_flx, IOSTAT = ios, ERR = 902 ) 99 99 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namsbc_flx in configuration namelist' ) 100 IF(lwm) WRITE ( numond, namsbc_flx ) 100 IF(lwm) WRITE ( numond, namsbc_flx ) 101 101 ! 102 102 ! ! check: do we plan to use ln_dm2dc with non-daily forcing? 103 103 IF( ln_dm2dc .AND. sn_qsr%freqh /= 24. ) & 104 & CALL ctl_stop( 'sbc_blk_core: ln_dm2dc can be activated only with daily short-wave forcing' ) 104 & CALL ctl_stop( 'sbc_blk_core: ln_dm2dc can be activated only with daily short-wave forcing' ) 105 105 ! 106 106 ! ! store namelist information in an array 107 107 slf_i(jp_utau) = sn_utau ; slf_i(jp_vtau) = sn_vtau 108 slf_i(jp_qtot) = sn_qtot ; slf_i(jp_qsr ) = sn_qsr 108 slf_i(jp_qtot) = sn_qtot ; slf_i(jp_qsr ) = sn_qsr 109 109 slf_i(jp_emp ) = sn_emp !! ; slf_i(jp_sfx ) = sn_sfx 110 110 ! 111 111 ALLOCATE( sf(jpfld), STAT=ierror ) ! set sf structure 112 IF( ierror > 0 ) THEN 113 CALL ctl_stop( 'sbc_flx: unable to allocate sf structure' ) ; RETURN 112 IF( ierror > 0 ) THEN 113 CALL ctl_stop( 'sbc_flx: unable to allocate sf structure' ) ; RETURN 114 114 ENDIF 115 115 DO ji= 1, jpfld … … 123 123 124 124 CALL fld_read( kt, nn_fsbc, sf ) ! input fields provided at the current time-step 125 125 126 126 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN ! update ocean fluxes at each SBC frequency 127 127 128 128 IF( ln_dm2dc ) THEN ! modify now Qsr to include the diurnal cycle 129 qsr(:,:) = sbc_dcy( sf(jp_qsr)%fnow(:,:,1) ) * tmask( :,:,1)129 qsr(:,:) = sbc_dcy( sf(jp_qsr)%fnow(:,:,1) ) * tmask(ji,jj,1) 130 130 ELSE 131 131 DO_2D( 0, 0, 0, 0 ) … … 138 138 qns (ji,jj) = ( sf(jp_qtot)%fnow(ji,jj,1) - sf(jp_qsr)%fnow(ji,jj,1) ) * tmask(ji,jj,1) 139 139 emp (ji,jj) = sf(jp_emp )%fnow(ji,jj,1) * tmask(ji,jj,1) 140 !!sfx (ji,jj) = sf(jp_sfx )%fnow(ji,jj,1) * tmask(ji,jj,1) 140 !!sfx (ji,jj) = sf(jp_sfx )%fnow(ji,jj,1) * tmask(ji,jj,1) 141 141 END_2D 142 142 ! ! add to qns the heat due to e-p … … 144 144 !!qns(:,:) = qns(:,:) - emp(:,:) * sst_m(:,:) * rcp ! mass flux is at SST 145 145 ! 146 ! clem: without these lbc calls, it seems that the northfold is not ok (true in 3.6, not sure in 4.x) 147 CALL lbc_lnk_multi( 'sbcflx', utau, 'U', -1._wp, vtau, 'V', -1._wp, & 148 & qns, 'T', 1._wp, emp , 'T', 1._wp, qsr, 'T', 1._wp ) !! sfx, 'T', 1._wp ) 146 ! clem: without these lbc calls, it seems that the northfold is not ok (true in 3.6, not sure in 4.x) 147 CALL lbc_lnk( 'sbcflx', utau, 'U', -1._wp) 148 CALL lbc_lnk( 'sbcflx', vtau, 'V', -1._wp) 149 CALL lbc_lnk( 'sbcflx', qns, 'T', 1._wp) 150 CALL lbc_lnk( 'sbcflx', emp, 'T', 1._wp) 151 CALL lbc_lnk( 'sbcflx', qsr, 'T', 1._wp) 152 153 ! 154 ! 155 ! clem: without these lbc calls, it seems that the northfold is not ok (true in 3.6, not sure in 4.x) 156 !CALL lbc_lnk_multi( 'sbcflx', utau, 'U', -1._wp, vtau, 'V', -1._wp, & 157 ! & qns, 'T', 1._wp, emp , 'T', 1._wp, qsr, 'T', 1._wp ) !! sfx, 'T', 1._wp ) 149 158 ! 150 159 IF( nitend-nit000 <= 100 .AND. lwp ) THEN ! control print (if less than 100 time-step asked) 151 WRITE(numout,*) 160 WRITE(numout,*) 152 161 WRITE(numout,*) ' read daily momentum, heat and freshwater fluxes OK' 153 162 DO jf = 1, jpfld … … 155 164 IF( jf == jp_qtot .OR. jf == jp_qsr ) zfact = 0.1 156 165 IF( jf == jp_emp ) zfact = 86400. 157 WRITE(numout,*) 166 WRITE(numout,*) 158 167 WRITE(numout,*) ' day: ', ndastp , TRIM(sf(jf)%clvar), ' * ', zfact 159 168 END DO … … 166 175 DO_2D( 0, 0, 0, 0 ) 167 176 ztx = ( utau(ji-1,jj ) + utau(ji,jj) ) * 0.5_wp * ( 2._wp - MIN( umask(ji-1,jj ,1), umask(ji,jj,1) ) ) 168 zty = ( vtau(ji ,jj-1) + vtau(ji,jj) ) * 0.5_wp * ( 2._wp - MIN( vmask(ji ,jj-1,1), vmask(ji,jj,1) ) ) 177 zty = ( vtau(ji ,jj-1) + vtau(ji,jj) ) * 0.5_wp * ( 2._wp - MIN( vmask(ji ,jj-1,1), vmask(ji,jj,1) ) ) 169 178 zmod = 0.5_wp * SQRT( ztx * ztx + zty * zty ) * tmask(ji,jj,1) 170 179 taum(ji,jj) = zmod … … 172 181 END_2D 173 182 ! 174 CALL lbc_lnk_multi( 'sbcflx', taum, 'T', 1._wp, wndm, 'T', 1._wp ) 183 CALL lbc_lnk( 'sbcflx', taum, 'T', 1._wp) 184 CALL lbc_lnk( 'sbcflx', wndm, 'T', 1._wp) 185 ! CALL lbc_lnk_multi( 'sbcflx', taum, 'T', 1._wp, wndm, 'T', 1._wp ) 175 186 ! 176 187 END SUBROUTINE sbc_flx … … 178 189 !!====================================================================== 179 190 END MODULE sbcflx 191 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/SBC/sbcfwb.F90
r14200 r14219 39 39 ! previous year 40 40 REAL(wp) :: area ! global mean ocean surface (interior domain) 41 42 # include "single_precision_substitute.h90" 41 43 42 44 !!---------------------------------------------------------------------- … … 117 119 ! 118 120 IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 119 y_fwfnow(1) = local_sum( e1e2t(:,:) * ( emp(:,:) - rnf(:,:) + fwfisf_cav(:,:) + fwfisf_par(:,:) - snwice_fmass(:,:)) )121 y_fwfnow(1) = local_sum( CASTWP(e1e2t(:,:) * ( emp(:,:) - rnf(:,:) + fwfisf_cav(:,:) + fwfisf_par(:,:) - snwice_fmass(:,:) )) ) 120 122 CALL mpp_delay_sum( 'sbcfwb', 'fwb', y_fwfnow(:), z_fwfprv(:), kt == nitend - nn_fsbc + 1 ) 121 123 z_fwfprv(1) = z_fwfprv(1) / area -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/SBC/sbcmod.F90
r14072 r14219 75 75 !! * Substitutions 76 76 # include "do_loop_substitute.h90" 77 # include "single_precision_substitute.h90" 77 78 !!---------------------------------------------------------------------- 78 79 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 441 442 END_2D 442 443 ! 443 CALL lbc_lnk( 'sbcwave', utau, 'U', -1. ) 444 CALL lbc_lnk( 'sbcwave', vtau, 'V', -1. ) 444 CALL lbc_lnk_multi( 'sbcwave', utau, 'U', -1._wp , vtau, 'V', -1._wp ) 445 445 ! 446 446 taum(:,:) = taum(:,:)*tauoc_wave(:,:) … … 452 452 utau(:,:) = utau(:,:) - tawx(:,:) + twox(:,:) 453 453 vtau(:,:) = vtau(:,:) - tawy(:,:) + twoy(:,:) 454 CALL lbc_lnk( 'sbcwave', utau, 'U', -1. ) 455 CALL lbc_lnk( 'sbcwave', vtau, 'V', -1. ) 454 CALL lbc_lnk_multi( 'sbcwave', utau, 'U', -1._wp, vtau, 'V', -1._wp ) 456 455 ! 457 456 DO_2D( 0, 0, 0, 0) … … 463 462 ! 464 463 ENDIF 465 CALL lbc_lnk( 'sbcmod', taum(:,:), 'T', 1. )464 CALL lbc_lnk( 'sbcmod', taum(:,:), 'T', 1._wp ) 466 465 ! 467 466 ! !== Misc. Options ==! … … 586 585 CALL prt_ctl(tab2d_1=qsr , clinfo1=' qsr - : ', mask1=tmask ) 587 586 CALL prt_ctl(tab3d_1=tmask , clinfo1=' tmask - : ', mask1=tmask, kdim=jpk ) 588 CALL prt_ctl(tab3d_1= ts(:,:,:,jp_tem,Kmm), clinfo1=' sst - : ', mask1=tmask, kdim=1 )589 CALL prt_ctl(tab3d_1= ts(:,:,:,jp_sal,Kmm), clinfo1=' sss - : ', mask1=tmask, kdim=1 )587 CALL prt_ctl(tab3d_1=CASTWP(ts(:,:,:,jp_tem,Kmm)), clinfo1=' sst - : ', mask1=tmask, kdim=1 ) 588 CALL prt_ctl(tab3d_1=CASTWP(ts(:,:,:,jp_sal,Kmm)), clinfo1=' sss - : ', mask1=tmask, kdim=1 ) 590 589 CALL prt_ctl(tab2d_1=utau , clinfo1=' utau - : ', mask1=umask, & 591 590 & tab2d_2=vtau , clinfo2=' vtau - : ', mask2=vmask ) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/SBC/sbcssm.F90
r14072 r14219 33 33 34 34 # include "domzgr_substitute.h90" 35 # include "single_precision_substitute.h90" 35 36 !!---------------------------------------------------------------------- 36 37 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 241 242 ssu_m(:,:) = uu(:,:,1,Kbb) 242 243 ssv_m(:,:) = vv(:,:,1,Kbb) 243 IF( l_useCT ) THEN ; sst_m(:,:) = eos_pt_from_ct( ts(:,:,1,jp_tem,Kmm), ts(:,:,1,jp_sal,Kmm) )244 IF( l_useCT ) THEN ; sst_m(:,:) = eos_pt_from_ct( CASTWP(ts(:,:,1,jp_tem,Kmm)), CASTWP(ts(:,:,1,jp_sal,Kmm)) ) 244 245 ELSE ; sst_m(:,:) = ts(:,:,1,jp_tem,Kmm) 245 246 ENDIF -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/SBC/sbcwave.F90
r14072 r14219 71 71 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: div_sd !: barotropic stokes drift divergence 72 72 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: ut0sd, vt0sd !: surface Stokes drift velocities at t-point 73 REAL( wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:,:) :: usd, vsd, wsd !: Stokes drift velocities at u-, v- & w-points, resp.u73 REAL(dp), PUBLIC, ALLOCATABLE, DIMENSION(:,:,:) :: usd, vsd, wsd !: Stokes drift velocities at u-, v- & w-points, resp.u 74 74 ! 75 75 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: charn !: charnock coefficient at t-point -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/STO/stopts.F90
r13295 r14219 44 44 !! 45 45 !!---------------------------------------------------------------------- 46 REAL( wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(inout) :: pts ! 1 : potential temperature [Celsius]46 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(inout) :: pts ! 1 : potential temperature [Celsius] 47 47 ! ! 2 : salinity [psu] 48 48 INTEGER :: ji, jj, jk, jts, jdof ! dummy loop indices -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/eosbn2.F90
r14200 r14219 182 182 # include "do_loop_substitute.h90" 183 183 # include "domzgr_substitute.h90" 184 # include "single_precision_substitute.h90" 184 185 !!---------------------------------------------------------------------- 185 186 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 313 314 ! ! 2 : salinity [psu] 314 315 REAL(wp), DIMENSION(:,:,:) , INTENT( out) :: prd ! in situ density [-] 315 REAL( wp), DIMENSION(:,:,:) , INTENT( out) :: prhop ! potential density (surface referenced)316 REAL(dp), DIMENSION(:,:,:) , INTENT( out) :: prhop ! potential density (surface referenced) 316 317 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: pdep ! depth [m] 317 318 !! … … 337 338 ! ! 2 : salinity [psu] 338 339 REAL(wp), DIMENSION(A2D_T(ktrd) ,JPK ), INTENT( out) :: prd ! in situ density [-] 339 REAL( wp), DIMENSION(A2D_T(ktrhop),JPK ), INTENT( out) :: prhop ! potential density (surface referenced)340 REAL(dp), DIMENSION(A2D_T(ktrhop),JPK ), INTENT( out) :: prhop ! potential density (surface referenced) 340 341 REAL(wp), DIMENSION(A2D_T(ktdep) ,JPK ), INTENT(in ) :: pdep ! depth [m] 341 342 ! … … 470 471 ! 471 472 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=prd, clinfo1=' eos-pot: ', & 472 & tab3d_2= prhop, clinfo2=' pot : ', kdim=jpk )473 & tab3d_2=CASTWP(prhop), clinfo2=' pot : ', kdim=jpk ) 473 474 ! 474 475 IF( ln_timing ) CALL timing_stop('eos-pot') … … 591 592 REAL(wp), DIMENSION(jpi,jpj,jpts), INTENT(in ) :: pts ! 1 : potential temperature [Celsius] 592 593 ! ! 2 : salinity [psu] 593 REAL( wp), DIMENSION(jpi,jpj ), INTENT( out) :: prhop ! potential density (surface referenced)594 REAL(dp), DIMENSION(jpi,jpj ), INTENT( out) :: prhop ! potential density (surface referenced) 594 595 ! 595 596 INTEGER :: ji, jj, jk, jsmp ! dummy loop indices … … 640 641 ! 641 642 END SELECT 642 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab2d_1= prhop, clinfo1=' pot: ', kdim=1 )643 ! 644 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab2d_1= prhop, clinfo1=' eos-pot: ' )643 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab2d_1=CASTWP(prhop), clinfo1=' pot: ', kdim=1 ) 644 ! 645 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab2d_1=CASTWP(prhop), clinfo1=' eos-pot: ' ) 645 646 ! 646 647 IF( ln_timing ) CALL timing_stop('eos-pot') -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/traadv.F90
r14200 r14219 73 73 # include "do_loop_substitute.h90" 74 74 # include "domzgr_substitute.h90" 75 # include "single_precision_substitute.h90" 75 76 !!---------------------------------------------------------------------- 76 77 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 90 91 INTEGER , INTENT(in) :: kt ! ocean time-step index 91 92 INTEGER , INTENT(in) :: Kbb, Kmm, Krhs ! time level indices 92 REAL( wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation93 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation 93 94 ! 94 95 INTEGER :: ji, jj, jk ! dummy loop index … … 178 179 ! 179 180 CASE ( np_CEN ) ! Centered scheme : 2nd / 4th order 180 IF (nn_hls.EQ.2) CALL lbc_lnk( 'traadv', pts(:,:,:,:,Kmm), 'T', 1. )181 IF (nn_hls.EQ.2) CALL lbc_lnk( 'traadv', pts(:,:,:,:,Kmm), 'T', 1._wp ) 181 182 CALL tra_adv_cen ( kt, nit000, 'TRA', zuu, zvv, zww, Kmm, pts, jpts, Krhs, nn_cen_h, nn_cen_v ) 182 183 CASE ( np_FCT ) ! FCT scheme : 2nd / 4th order 183 184 IF (nn_hls.EQ.2) THEN 184 CALL lbc_lnk_multi( 'traadv', pts(:,:,:,:,Kbb), 'T', 1. , pts(:,:,:,:,Kmm), 'T', 1.)185 CALL lbc_lnk_multi( 'traadv', zuu(:,:,:), 'U', -1. , zvv(:,:,:), 'V', -1., zww(:,:,:), 'W', 1.)185 CALL lbc_lnk_multi( 'traadv', pts(:,:,:,:,Kbb), 'T', 1._wp, pts(:,:,:,:,Kmm), 'T', 1._wp) 186 CALL lbc_lnk_multi( 'traadv', zuu(:,:,:), 'U', -1._wp, zvv(:,:,:), 'V', -1._wp, zww(:,:,:), 'W', 1._wp) 186 187 #if defined key_loop_fusion 187 188 CALL tra_adv_fct_lf ( kt, nit000, 'TRA', rDt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs, nn_fct_h, nn_fct_v ) … … 194 195 CASE ( np_MUS ) ! MUSCL 195 196 IF (nn_hls.EQ.2) THEN 196 CALL lbc_lnk( 'traadv', pts(:,:,:,:,Kbb), 'T', 1. )197 CALL lbc_lnk( 'traadv', pts(:,:,:,:,Kbb), 'T', 1._wp) 197 198 #if defined key_loop_fusion 198 199 CALL tra_adv_mus_lf ( kt, nit000, 'TRA', rDt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs, ln_mus_ups ) … … 204 205 END IF 205 206 CASE ( np_UBS ) ! UBS 206 IF (nn_hls.EQ.2) CALL lbc_lnk( 'traadv', pts(:,:,:,:,Kbb), 'T', 1. )207 IF (nn_hls.EQ.2) CALL lbc_lnk( 'traadv', pts(:,:,:,:,Kbb), 'T', 1._wp) 207 208 CALL tra_adv_ubs ( kt, nit000, 'TRA', rDt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs, nn_ubs_v ) 208 209 CASE ( np_QCK ) ! QUICKEST 209 210 IF (nn_hls.EQ.2) THEN 210 CALL lbc_lnk_multi( 'traadv', zuu(:,:,:), 'U', -1. , zvv(:,:,:), 'V', -1.)211 CALL lbc_lnk( 'traadv', pts(:,:,:,:,Kbb), 'T', 1. )211 CALL lbc_lnk_multi( 'traadv', zuu(:,:,:), 'U', -1._wp, zvv(:,:,:), 'V', -1._wp) 212 CALL lbc_lnk( 'traadv', pts(:,:,:,:,Kbb), 'T', 1._wp) 212 213 END IF 213 214 CALL tra_adv_qck ( kt, nit000, 'TRA', rDt, zuu, zvv, zww, Kbb, Kmm, pts, jpts, Krhs ) … … 230 231 ENDIF 231 232 ! ! print mean trends (used for debugging) 232 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1= pts(:,:,:,jp_tem,Krhs), clinfo1=' adv - Ta: ', mask1=tmask, &233 & tab3d_2= pts(:,:,:,jp_sal,Krhs), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' )233 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(pts(:,:,:,jp_tem,Krhs)), clinfo1=' adv - Ta: ', mask1=tmask, & 234 & tab3d_2=CASTWP(pts(:,:,:,jp_sal,Krhs)), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 234 235 235 236 ! TEMP: [tiling] This change not necessary if using XIOS (subdomain support) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/traadv_cen.F90
r14072 r14219 38 38 # include "do_loop_substitute.h90" 39 39 # include "domzgr_substitute.h90" 40 # include "single_precision_substitute.h90" 40 41 !!---------------------------------------------------------------------- 41 42 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 73 74 ! TEMP: [tiling] This can be A2D(nn_hls) if using XIOS (subdomain support) 74 75 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pU, pV, pW ! 3 ocean volume flux components 75 REAL( wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracers and RHS of tracer equation76 REAL(dp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracers and RHS of tracer equation 76 77 ! 77 78 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 131 132 zwy(ji,jj,jk) = 0.5_wp * pV(ji,jj,jk) * zC4t_v 132 133 END_3D 133 IF (nn_hls.EQ.1) CALL lbc_lnk_multi( 'traadv_cen', zwx, 'U', -1. , zwy, 'V', -1.)134 IF (nn_hls.EQ.1) CALL lbc_lnk_multi( 'traadv_cen', zwx, 'U', -1._wp , zwy, 'V', -1._wp ) 134 135 ! 135 136 CASE DEFAULT … … 145 146 ! 146 147 CASE( 4 ) !* 4th order compact 147 CALL interp_4th_cpt( pt(:,:,:,jn,Kmm) , ztw ) ! ztw = interpolated value of T at w-point148 CALL interp_4th_cpt( CASTWP(pt(:,:,:,jn,Kmm)) , ztw ) ! ztw = interpolated value of T at w-point 148 149 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 149 150 zwz(ji,jj,jk) = pW(ji,jj,jk) * ztw(ji,jj,jk) * wmask(ji,jj,jk) … … 173 174 ! ! trend diagnostics 174 175 IF( l_trd ) THEN 175 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_xad, zwx, pU, pt(:,:,:,jn,Kmm) )176 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_yad, zwy, pV, pt(:,:,:,jn,Kmm) )177 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_zad, zwz, pW, pt(:,:,:,jn,Kmm) )176 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_xad, zwx, pU, CASTWP(pt(:,:,:,jn,Kmm)) ) 177 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_yad, zwy, pV, CASTWP(pt(:,:,:,jn,Kmm)) ) 178 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_zad, zwz, pW, CASTWP(pt(:,:,:,jn,Kmm)) ) 178 179 ENDIF 179 180 ! ! "Poleward" heat and salt transports … … 188 189 !!====================================================================== 189 190 END MODULE traadv_cen 191 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/traadv_fct.F90
r14200 r14219 49 49 # include "do_loop_substitute.h90" 50 50 # include "domzgr_substitute.h90" 51 # include "single_precision_substitute.h90" 51 52 !!---------------------------------------------------------------------- 52 53 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 83 84 ! TEMP: [tiling] This can be A2D(nn_hls) if using XIOS (subdomain support) 84 85 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pU, pV, pW ! 3 ocean volume flux components 85 REAL( wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracers and RHS of tracer equation86 REAL(dp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracers and RHS of tracer equation 86 87 ! 87 88 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 89 90 REAL(wp) :: zfp_ui, zfp_vj, zfp_wk, zC2t_u, zC4t_u ! - - 90 91 REAL(wp) :: zfm_ui, zfm_vj, zfm_wk, zC2t_v, zC4t_v ! - - 91 REAL(wp), DIMENSION(A2D(nn_hls),jpk) :: zwi, zwx, zwy, zwz, ztu, ztv, zltu, zltv, ztw 92 REAL(dp), DIMENSION(jpi,jpj,jpk) :: zwx, zwy, zwz 93 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zwi, ztu, ztv, zltu, zltv, ztw 92 94 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: ztrdx, ztrdy, ztrdz, zptry 93 95 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zwinf, zwdia, zwsup … … 258 260 IF (nn_hls.EQ.1) CALL lbc_lnk_multi( 'traadv_fct', ztu, 'U', -1.0_wp , ztv, 'V', -1.0_wp ) ! Lateral boundary cond. (unchanged sgn) 259 261 ! 260 IF (nn_hls.EQ.1) CALL lbc_lnk_multi( 'traadv_fct', ztu, 'U', -1.0_wp , ztv, 'V', -1.0_wp ) ! Lateral boundary cond. (unchanged sgn)261 !262 262 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) ! Horizontal advective fluxes 263 263 zC2t_u = pt(ji,jj,jk,jn,Kmm) + pt(ji+1,jj ,jk,jn,Kmm) ! 2 x C2 interpolation of T at u- & v-points (x2) … … 283 283 ! 284 284 CASE( 4 ) !- 4th order COMPACT 285 CALL interp_4th_cpt( pt(:,:,:,jn,Kmm) , ztw ) ! zwt = COMPACT interpolation of T at w-point285 CALL interp_4th_cpt( CASTWP(pt(:,:,:,jn,Kmm)) , ztw ) ! zwt = COMPACT interpolation of T at w-point 286 286 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 287 287 zwz(ji,jj,jk) = ( pW(ji,jj,jk) * ztw(ji,jj,jk) - zwz(ji,jj,jk) ) * wmask(ji,jj,jk) … … 294 294 ! 295 295 IF (nn_hls.EQ.1) THEN 296 #if defined key_single 297 CALL lbc_lnk ( 'traadv_fct', zwi, 'T', 1.0_wp ) 298 CALL lbc_lnk_multi( 'traadv_fct', zwx, 'U', -1.0_wp , zwy, 'V', -1.0_wp, zwz, 'T', 1.0_wp ) 299 #else 296 300 CALL lbc_lnk_multi( 'traadv_fct', zwi, 'T', 1.0_wp, zwx, 'U', -1.0_wp , zwy, 'V', -1.0_wp, zwz, 'T', 1.0_wp ) 301 #endif 297 302 ELSE 298 303 CALL lbc_lnk( 'traadv_fct', zwi, 'T', 1.0_wp) … … 300 305 ! 301 306 IF (nn_hls.EQ.1) THEN 307 #if defined key_single 308 CALL lbc_lnk ( 'traadv_fct', zwi, 'T', 1.0_wp ) 309 CALL lbc_lnk_multi( 'traadv_fct', zwx, 'U', -1.0_wp , zwy, 'V', -1.0_wp, zwz, 'T', 1.0_wp ) 310 #else 302 311 CALL lbc_lnk_multi( 'traadv_fct', zwi, 'T', 1.0_wp, zwx, 'U', -1.0_wp , zwy, 'V', -1.0_wp, zwz, 'T', 1.0_wp ) 312 #endif 303 313 ELSE 304 314 CALL lbc_lnk( 'traadv_fct', zwi, 'T', 1.0_wp) … … 325 335 ! !== monotonicity algorithm ==! 326 336 ! 327 CALL nonosc( Kmm, pt(:,:,:,jn,Kbb), zwx, zwy, zwz, zwi, p2dt )337 CALL nonosc( Kmm, CASTWP(pt(:,:,:,jn,Kbb)), zwx, zwy, zwz, zwi, p2dt ) 328 338 ! 329 339 ! !== final trend with corrected fluxes ==! … … 357 367 ! 358 368 IF( l_trd ) THEN ! trend diagnostics 359 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_xad, ztrdx, pU, pt(:,:,:,jn,Kmm) )360 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_yad, ztrdy, pV, pt(:,:,:,jn,Kmm) )361 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_zad, ztrdz, pW, pt(:,:,:,jn,Kmm) )369 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_xad, ztrdx, pU, CASTWP(pt(:,:,:,jn,Kmm)) ) 370 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_yad, ztrdy, pV, CASTWP(pt(:,:,:,jn,Kmm)) ) 371 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_zad, ztrdz, pW, CASTWP(pt(:,:,:,jn,Kmm)) ) 362 372 ENDIF 363 373 ! ! heat/salt transport … … 402 412 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in ) :: pbef ! before field 403 413 REAL(wp), DIMENSION(A2D(nn_hls) ,jpk), INTENT(in ) :: paft ! after field 404 REAL( wp), DIMENSION(A2D(nn_hls) ,jpk), INTENT(inout) :: paa, pbb, pcc ! monotonic fluxes in the 3 directions414 REAL(dp), DIMENSION(A2D(nn_hls) ,jpk), INTENT(inout) :: paa, pbb, pcc ! monotonic fluxes in the 3 directions 405 415 ! 406 416 INTEGER :: ji, jj, jk ! dummy loop indices -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/traadv_mus.F90
r14072 r14219 48 48 # include "do_loop_substitute.h90" 49 49 # include "domzgr_substitute.h90" 50 # include "single_precision_substitute.h90" 50 51 !!---------------------------------------------------------------------- 51 52 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 83 84 ! TEMP: [tiling] This can be A2D(nn_hls) if using XIOS (subdomain support) 84 85 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pU, pV, pW ! 3 ocean volume flux components 85 REAL( wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracers and RHS of tracer equation86 REAL(dp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracers and RHS of tracer equation 86 87 ! 87 88 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 185 186 ! ! trend diagnostics 186 187 IF( l_trd ) THEN 187 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_xad, zwx, pU, pt(:,:,:,jn,Kbb) )188 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_yad, zwy, pV, pt(:,:,:,jn,Kbb) )188 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_xad, zwx, pU, CASTWP(pt(:,:,:,jn,Kbb)) ) 189 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_yad, zwy, pV, CASTWP(pt(:,:,:,jn,Kbb)) ) 189 190 END IF 190 191 ! ! "Poleward" heat and salt transports … … 237 238 END_3D 238 239 ! ! send trends for diagnostic 239 IF( l_trd ) CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_zad, zwx, pW, pt(:,:,:,jn,Kbb) )240 IF( l_trd ) CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_zad, zwx, pW, CASTWP(pt(:,:,:,jn,Kbb)) ) 240 241 ! 241 242 END DO ! end of tracer loop … … 245 246 !!====================================================================== 246 247 END MODULE traadv_mus 248 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/traadv_qck.F90
r14200 r14219 42 42 # include "do_loop_substitute.h90" 43 43 # include "domzgr_substitute.h90" 44 # include "single_precision_substitute.h90" 44 45 !!---------------------------------------------------------------------- 45 46 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 93 94 ! TEMP: [tiling] This can be A2D(nn_hls) if using XIOS (subdomain support) 94 95 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pU, pV, pW ! 3 ocean volume transport components 95 REAL( wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracers and RHS of tracer equation96 REAL(dp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracers and RHS of tracer equation 96 97 !!---------------------------------------------------------------------- 97 98 ! … … 131 132 ! TEMP: [tiling] This can be A2D(nn_hls) if using XIOS (subdomain support) 132 133 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pU ! i-velocity components 133 REAL( wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! active tracers and RHS of tracer equation134 REAL(dp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! active tracers and RHS of tracer equation 134 135 !! 135 136 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 198 199 END_3D 199 200 ! ! trend diagnostics 200 IF( l_trd ) CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_xad, zwx, pU, pt(:,:,:,jn,Kmm) )201 IF( l_trd ) CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_xad, zwx, pU, CASTWP(pt(:,:,:,jn,Kmm)) ) 201 202 ! 202 203 END DO … … 216 217 ! TEMP: [tiling] This can be A2D(nn_hls) if using XIOS (subdomain support) 217 218 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pV ! j-velocity components 218 REAL( wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! active tracers and RHS of tracer equation219 REAL(dp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! active tracers and RHS of tracer equation 219 220 !! 220 221 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 289 290 END_3D 290 291 ! ! trend diagnostics 291 IF( l_trd ) CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_yad, zwy, pV, pt(:,:,:,jn,Kmm) )292 IF( l_trd ) CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_yad, zwy, pV, CASTWP(pt(:,:,:,jn,Kmm)) ) 292 293 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) 293 294 IF( l_ptr ) CALL dia_ptr_hst( jn, 'adv', zwy(:,:,:) ) … … 308 309 ! TEMP: [tiling] This can be A2D(nn_hls) if using XIOS (subdomain support) 309 310 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pW ! vertical velocity 310 REAL( wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! active tracers and RHS of tracer equation311 REAL(dp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! active tracers and RHS of tracer equation 311 312 ! 312 313 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 341 342 END_3D 342 343 ! ! Send trends for diagnostic 343 IF( l_trd ) CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_zad, zwz, pW, pt(:,:,:,jn,Kmm) )344 IF( l_trd ) CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_zad, zwz, pW, CASTWP(pt(:,:,:,jn,Kmm)) ) 344 345 ! 345 346 END DO -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/traadv_ubs.F90
r14072 r14219 40 40 # include "do_loop_substitute.h90" 41 41 # include "domzgr_substitute.h90" 42 # include "single_precision_substitute.h90" 42 43 !!---------------------------------------------------------------------- 43 44 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 60 61 !! For example the i-component of the advective fluxes are given by : 61 62 !! ! e2u e3u un ( mi(Tn) - zltu(i ) ) if un(i) >= 0 62 !! ztu = ! or 63 !! ztu = ! or 63 64 !! ! e2u e3u un ( mi(Tn) - zltu(i+1) ) if un(i) < 0 64 65 !! where zltu is the second derivative of the before temperature field: … … 94 95 ! TEMP: [tiling] This can be A2D(nn_hls) if using XIOS (subdomain support) 95 96 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pU, pV, pW ! 3 ocean volume transport components 96 REAL( wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracers and RHS of tracer equation97 REAL(dp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracers and RHS of tracer equation 97 98 ! 98 99 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 174 175 ! 175 176 IF( l_trd ) THEN ! trend diagnostics 176 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_xad, ztu, pU, pt(:,:,:,jn,Kmm) )177 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_yad, ztv, pV, pt(:,:,:,jn,Kmm) )177 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_xad, ztu, pU, CASTWP(pt(:,:,:,jn,Kmm)) ) 178 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_yad, ztv, pV, CASTWP(pt(:,:,:,jn,Kmm)) ) 178 179 END IF 179 180 ! … … 232 233 ! 233 234 CASE( 4 ) ! 4th order COMPACT 234 CALL interp_4th_cpt( pt(:,:,:,jn,Kmm) , ztw ) ! 4th order compact interpolation of T at w-point235 CALL interp_4th_cpt( CASTWP(pt(:,:,:,jn,Kmm)) , ztw ) 235 236 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 236 237 ztw(ji,jj,jk) = pW(ji,jj,jk) * ztw(ji,jj,jk) * wmask(ji,jj,jk) … … 278 279 INTEGER , INTENT(in ) :: Kmm ! time level index 279 280 REAL(wp), INTENT(in ) :: p2dt ! tracer time-step 280 REAL( wp), DIMENSION(jpi,jpj,jpk) :: pbef ! before field281 REAL(dp), DIMENSION(jpi,jpj,jpk) :: pbef ! before field 281 282 REAL(wp), INTENT(inout), DIMENSION(A2D(nn_hls) ,jpk) :: paft ! after field 282 283 REAL(wp), INTENT(inout), DIMENSION(A2D(nn_hls) ,jpk) :: pcc ! monotonic flux in the k direction -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/traatf.F90
r14072 r14219 59 59 # include "do_loop_substitute.h90" 60 60 # include "domzgr_substitute.h90" 61 # include "single_precision_substitute.h90" 61 62 !!---------------------------------------------------------------------- 62 63 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 89 90 INTEGER , INTENT(in ) :: kt ! ocean time-step index 90 91 INTEGER , INTENT(in ) :: Kbb, Kmm, Kaa ! time level indices 91 REAL( wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers92 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers 92 93 !! 93 94 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 152 153 ELSE ! Leap-Frog + Asselin filter time stepping 153 154 ! 154 IF( ln_linssh ) THEN ; CALL tra_atf_fix( kt, Kbb, Kmm, Kaa, nit000, 'TRA', pts, jpts ) ! linear free surface 155 ELSE ; CALL tra_atf_vvl( kt, Kbb, Kmm, Kaa, nit000, rn_Dt, 'TRA', pts, sbc_tsc, sbc_tsc_b, jpts ) ! non-linear free surface155 IF( ln_linssh ) THEN ; CALL tra_atf_fix( kt, Kbb, Kmm, Kaa, nit000, 'TRA', pts, jpts ) ! linear free surface 156 ELSE ; CALL tra_atf_vvl( kt, Kbb, Kmm, Kaa, nit000, CASTWP(rn_Dt), 'TRA', pts, sbc_tsc, sbc_tsc_b, jpts ) ! non-linear free surface 156 157 ENDIF 157 158 ! … … 171 172 ! 172 173 ! ! control print 173 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1= pts(:,:,:,jp_tem,Kmm), clinfo1=' nxt - Tn: ', mask1=tmask, &174 & tab3d_2= pts(:,:,:,jp_sal,Kmm), clinfo2= ' Sn: ', mask2=tmask )174 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(pts(:,:,:,jp_tem,Kmm)), clinfo1=' nxt - Tn: ', mask1=tmask, & 175 & tab3d_2=CASTWP(pts(:,:,:,jp_sal,Kmm)), clinfo2= ' Sn: ', mask2=tmask ) 175 176 ! 176 177 IF( ln_timing ) CALL timing_stop('tra_atf') … … 194 195 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 195 196 INTEGER , INTENT(in ) :: kjpt ! number of tracers 196 REAL( wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracer fields197 REAL(dp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracer fields 197 198 ! 198 199 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 238 239 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 239 240 INTEGER , INTENT(in ) :: kjpt ! number of tracers 240 REAL( wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracer fields241 REAL(dp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracer fields 241 242 REAL(wp), DIMENSION(jpi,jpj ,kjpt) , INTENT(in ) :: psbc_tc ! surface tracer content 242 243 REAL(wp), DIMENSION(jpi,jpj ,kjpt) , INTENT(in ) :: psbc_tc_b ! before surface tracer content … … 244 245 LOGICAL :: ll_traqsr, ll_rnf, ll_isf ! local logical 245 246 INTEGER :: ji, jj, jk, jn ! dummy loop indices 246 REAL( wp) :: zfact, zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d ! local scalar247 REAL( wp) :: zfact2, ze3t_b, ze3t_n, ze3t_a, ze3t_f, ze3t_d, zscale ! - -247 REAL(dp) :: zfact, zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d ! local scalar 248 REAL(dp) :: zfact2, ze3t_b, ze3t_n, ze3t_a, ze3t_f, ze3t_d, zscale ! - - 248 249 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: ztrd_atf 249 250 !!---------------------------------------------------------------------- … … 384 385 !!====================================================================== 385 386 END MODULE traatf 387 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/traatf_qco.F90
r14072 r14219 225 225 INTEGER , INTENT(in ) :: Kbb, Kmm, Kaa ! time level indices 226 226 INTEGER , INTENT(in ) :: kit000 ! first time step index 227 REAL( wp) , INTENT(in ) :: p2dt ! time-step227 REAL(dp) , INTENT(in ) :: p2dt ! time-step 228 228 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 229 229 INTEGER , INTENT(in ) :: kjpt ! number of tracers -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/trabbc.F90
r14072 r14219 47 47 # include "do_loop_substitute.h90" 48 48 # include "domzgr_substitute.h90" 49 # include "single_precision_substitute.h90" 49 50 !!---------------------------------------------------------------------- 50 51 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 78 79 INTEGER, INTENT(in ) :: kt ! ocean time-step index 79 80 INTEGER, INTENT(in ) :: Kmm, Krhs ! time level indices 80 REAL( wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation81 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation 81 82 ! 82 83 INTEGER :: ji, jj, jk ! dummy loop indices … … 105 106 CALL iom_put ( "hfgeou" , rho0_rcp * qgh_trd0(:,:) ) 106 107 ENDIF 107 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1= pts(:,:,:,jp_tem,Krhs), clinfo1=' bbc - Ta: ', mask1=tmask, clinfo3='tra-ta' )108 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(pts(:,:,:,jp_tem,Krhs)), clinfo1=' bbc - Ta: ', mask1=tmask, clinfo3='tra-ta' ) 108 109 ! 109 110 IF( ln_timing ) CALL timing_stop('tra_bbc') -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/trabbl.F90
r14200 r14219 69 69 # include "do_loop_substitute.h90" 70 70 # include "domzgr_substitute.h90" 71 # include "single_precision_substitute.h90" 71 72 !!---------------------------------------------------------------------- 72 73 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 104 105 INTEGER, INTENT(in ) :: kt ! ocean time-step 105 106 INTEGER, INTENT(in ) :: Kbb, Kmm, Krhs ! time level indices 106 REAL( wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation107 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation 107 108 ! 108 109 INTEGER :: ji, jj, jk ! Dummy loop indices … … 122 123 IF( nn_bbl_ldf == 1 ) THEN !* Diffusive bbl 123 124 ! 124 CALL tra_bbl_dif( pts(:,:,:,:,Kbb), pts(:,:,:,:,Krhs), jpts, Kmm )125 CALL tra_bbl_dif( CASTWP(pts(:,:,:,:,Kbb)), pts(:,:,:,:,Krhs), jpts, Kmm ) 125 126 IF( sn_cfctl%l_prtctl ) & 126 CALL prt_ctl( tab3d_1= pts(:,:,:,jp_tem,Krhs), clinfo1=' bbl_ldf - Ta: ', mask1=tmask, &127 & tab3d_2= pts(:,:,:,jp_sal,Krhs), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' )127 CALL prt_ctl( tab3d_1=CASTWP(pts(:,:,:,jp_tem,Krhs)), clinfo1=' bbl_ldf - Ta: ', mask1=tmask, & 128 & tab3d_2=CASTWP(pts(:,:,:,jp_sal,Krhs)), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 128 129 IF( ntile == 0 .OR. ntile == nijtile ) THEN ! Do only on the last tile 129 130 CALL iom_put( "ahu_bbl", ahu_bbl ) ! bbl diffusive flux i-coef … … 135 136 IF( nn_bbl_adv /= 0 ) THEN !* Advective bbl 136 137 ! 137 CALL tra_bbl_adv( pts(:,:,:,:,Kbb), pts(:,:,:,:,Krhs), jpts, Kmm )138 CALL tra_bbl_adv( CASTWP(pts(:,:,:,:,Kbb)), pts(:,:,:,:,Krhs), jpts, Kmm ) 138 139 IF(sn_cfctl%l_prtctl) & 139 CALL prt_ctl( tab3d_1= pts(:,:,:,jp_tem,Krhs), clinfo1=' bbl_adv - Ta: ', mask1=tmask, &140 & tab3d_2= pts(:,:,:,jp_sal,Krhs), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' )140 CALL prt_ctl( tab3d_1=CASTWP(pts(:,:,:,jp_tem,Krhs)), clinfo1=' bbl_adv - Ta: ', mask1=tmask, & 141 & tab3d_2=CASTWP(pts(:,:,:,jp_sal,Krhs)), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 141 142 IF( ntile == 0 .OR. ntile == nijtile ) THEN ! Do only on the last tile 142 143 ! lateral boundary conditions ; just need for outputs … … 184 185 INTEGER , INTENT(in ) :: kjpt ! number of tracers 185 186 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pt ! before and now tracer fields 186 REAL( wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pt_rhs ! tracer trend187 REAL(dp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pt_rhs ! tracer trend 187 188 INTEGER , INTENT(in ) :: Kmm ! time level indices 188 189 ! … … 232 233 INTEGER , INTENT(in ) :: kjpt ! number of tracers 233 234 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pt ! before and now tracer fields 234 REAL( wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pt_rhs ! tracer trend235 REAL(dp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pt_rhs ! tracer trend 235 236 INTEGER , INTENT(in ) :: Kmm ! time level indices 236 237 ! … … 551 552 !!====================================================================== 552 553 END MODULE trabbl 554 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/tradmp.F90
r14072 r14219 53 53 !! * Substitutions 54 54 # include "do_loop_substitute.h90" 55 # include "single_precision_substitute.h90" 55 56 !!---------------------------------------------------------------------- 56 57 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 92 93 INTEGER, INTENT(in ) :: kt ! ocean time-step index 93 94 INTEGER, INTENT(in ) :: Kbb, Kmm, Krhs ! time level indices 94 REAL( wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation95 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation 95 96 ! 96 97 INTEGER :: ji, jj, jk, jn ! dummy loop indices 97 REAL( wp), DIMENSION(A2D(nn_hls),jpk,jpts) :: zts_dta98 REAL(dp), DIMENSION(A2D(nn_hls),jpk,jpts) :: zts_dta 98 99 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: ztrdts 99 100 !!---------------------------------------------------------------------- … … 147 148 ENDIF 148 149 ! ! Control print 149 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=pts(:,:,:,jp_tem,Krhs), clinfo1=' dmp - Ta: ', mask1=tmask, & 150 & tab3d_2=pts(:,:,:,jp_sal,Krhs), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 150 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(pts(:,:,:,jp_tem,Krhs)), clinfo1=' dmp - Ta: ', mask1=tmask, tab3d_2=REAL(pts(:,:,:,jp_sal,Krhs), wp), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 151 151 152 ! 152 153 IF( ln_timing ) CALL timing_stop('tra_dmp') -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/traisf.F90
r14072 r14219 25 25 # include "do_loop_substitute.h90" 26 26 # include "domzgr_substitute.h90" 27 # include "single_precision_substitute.h90" 27 28 !!---------------------------------------------------------------------- 28 29 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 42 43 INTEGER , INTENT(in ) :: kt ! ocean time step 43 44 INTEGER , INTENT(in ) :: Kmm, Krhs ! ocean time level indices 44 REAL( wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation45 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation 45 46 !!---------------------------------------------------------------------- 46 47 ! … … 80 81 IF ( ln_isfdebug ) THEN 81 82 IF( ntile == 0 .OR. ntile == nijtile ) THEN ! Do only for the full domain 82 CALL debug('tra_isf: pts(:,:,:,:,Krhs) T', pts(:,:,:,1,Krhs))83 CALL debug('tra_isf: pts(:,:,:,:,Krhs) S', pts(:,:,:,2,Krhs))83 CALL debug('tra_isf: pts(:,:,:,:,Krhs) T', CASTWP(pts(:,:,:,1,Krhs))) 84 CALL debug('tra_isf: pts(:,:,:,:,Krhs) S', CASTWP(pts(:,:,:,2,Krhs))) 84 85 ENDIF 85 86 END IF … … 98 99 !! 99 100 !!---------------------------------------------------------------------- 100 REAL( wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(inout) :: pts101 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(inout) :: pts 101 102 !!---------------------------------------------------------------------- 102 103 INTEGER , DIMENSION(jpi,jpj) , INTENT(in ) :: ktop , kbot … … 139 140 !! 140 141 !!---------------------------------------------------------------------- 141 REAL( wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(inout) :: ptsa142 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(inout) :: ptsa 142 143 !!---------------------------------------------------------------------- 143 144 INTEGER , INTENT(in ) :: Kmm ! ocean time level index -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/traldf.F90
r14200 r14219 40 40 PUBLIC tra_ldf_init ! called by nemogcm.F90 41 41 42 # include "single_precision_substitute.h90" 42 43 !!---------------------------------------------------------------------- 43 44 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 55 56 INTEGER, INTENT(in ) :: kt ! ocean time-step index 56 57 INTEGER, INTENT(in ) :: Kbb, Kmm, Krhs ! ocean time level indices 57 REAL( wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation58 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation 58 59 !! 59 60 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdt, ztrds … … 86 87 SELECT CASE ( nldf_tra ) !* compute lateral mixing trend and add it to the general trend 87 88 CASE ( np_lap ) ! laplacian: iso-level operator 88 CALL tra_ldf_lap ( kt, Kmm, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, pts(:,:,:,:,Kbb), pts(:,:,:,:,Krhs), jpts, 1 )89 CALL tra_ldf_lap ( kt, Kmm, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, CASTWP(pts(:,:,:,:,Kbb)), pts(:,:,:,:,Krhs), jpts, 1 ) 89 90 CASE ( np_lap_i ) ! laplacian: standard iso-neutral operator (Madec) 90 CALL tra_ldf_iso ( kt, Kmm, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, pts(:,:,:,:,Kbb), pts(:,:,:,:,Kbb), pts(:,:,:,:,Krhs), jpts, 1 )91 CALL tra_ldf_iso ( kt, Kmm, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, CASTWP(pts(:,:,:,:,Kbb)), CASTWP(pts(:,:,:,:,Kbb)), pts(:,:,:,:,Krhs), jpts, 1 ) 91 92 CASE ( np_lap_it ) ! laplacian: triad iso-neutral operator (griffies) 92 CALL tra_ldf_triad( kt, Kmm, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, pts(:,:,:,:,Kbb), pts(:,:,:,:,Kbb), pts(:,:,:,:,Krhs), jpts, 1 )93 CALL tra_ldf_triad( kt, Kmm, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, CASTWP(pts(:,:,:,:,Kbb)), CASTWP(pts(:,:,:,:,Kbb)), pts(:,:,:,:,Krhs), jpts, 1 ) 93 94 CASE ( np_blp , np_blp_i , np_blp_it ) ! bilaplacian: iso-level & iso-neutral operators 94 IF(nn_hls.EQ.2) CALL lbc_lnk( 'tra_ldf', pts(:,:,:,:,Kbb), 'T',1. )95 CALL tra_ldf_blp ( kt, Kmm, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, pts(:,:,:,:,Kbb), pts(:,:,:,:,Krhs), jpts, nldf_tra )95 IF(nn_hls.EQ.2) CALL lbc_lnk( 'tra_ldf', pts(:,:,:,:,Kbb), 'T',1._wp) 96 CALL tra_ldf_blp ( kt, Kmm, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, CASTWP(pts(:,:,:,:,Kbb)), pts(:,:,:,:,Krhs), jpts, nldf_tra ) 96 97 END SELECT 97 98 ! … … 108 109 ENDIF 109 110 ! !* print mean trends (used for debugging) 110 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1= pts(:,:,:,jp_tem,Krhs), clinfo1=' ldf - Ta: ', mask1=tmask,&111 & tab3d_2= pts(:,:,:,jp_sal,Krhs), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' )111 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(pts(:,:,:,jp_tem,Krhs)), clinfo1=' ldf - Ta: ', mask1=tmask, & 112 & tab3d_2=CASTWP(pts(:,:,:,jp_sal,Krhs)), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 112 113 ! 113 114 IF( ln_timing ) CALL timing_stop('tra_ldf') -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/traldf_iso.F90
r14072 r14219 65 65 REAL(wp), DIMENSION(:,:,:,:), INTENT(in ) :: pt ! tracer (kpass=1) or laplacian of tracer (kpass=2) 66 66 REAL(wp), DIMENSION(:,:,:,:), INTENT(in ) :: pt2 ! tracer (only used in kpass=2) 67 REAL( wp), DIMENSION(:,:,:,:), INTENT(inout) :: pt_rhs ! tracer trend67 REAL(dp), DIMENSION(:,:,:,:), INTENT(inout) :: pt_rhs ! tracer trend 68 68 !! 69 69 CALL tra_ldf_iso_t( kt, Kmm, kit000, cdtype, pahu, pahv, is_tile(pahu), & … … 128 128 REAL(wp), DIMENSION(A2D_T(ktt) ,JPK,KJPT), INTENT(in ) :: pt ! tracer (kpass=1) or laplacian of tracer (kpass=2) 129 129 REAL(wp), DIMENSION(A2D_T(ktt2) ,JPK,KJPT), INTENT(in ) :: pt2 ! tracer (only used in kpass=2) 130 REAL( wp), DIMENSION(A2D_T(ktt_rhs),JPK,KJPT), INTENT(inout) :: pt_rhs ! tracer trend130 REAL(dp), DIMENSION(A2D_T(ktt_rhs),JPK,KJPT), INTENT(inout) :: pt_rhs ! tracer trend 131 131 ! 132 132 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 198 198 ! 199 199 IF( ln_traldf_blp ) THEN ! bilaplacian operator 200 DO_3D( 0, 0, 0, 0, 2, jpkm1 )200 DO_3D( 1, 0, 1, 0, 2, jpkm1 ) 201 201 akz(ji,jj,jk) = 16._wp & 202 202 & * ah_wslp2 (ji,jj,jk) & -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/traldf_lap_blp.F90
r14200 r14219 40 40 # include "do_loop_substitute.h90" 41 41 # include "domzgr_substitute.h90" 42 # include "single_precision_substitute.h90" 42 43 !!---------------------------------------------------------------------- 43 44 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 61 62 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: pgui, pgvi ! tracer gradient at top levels 62 63 REAL(wp), DIMENSION(:,:,:,:), INTENT(in ) :: pt ! before tracer fields 63 REAL( wp), DIMENSION(:,:,:,:), INTENT(inout) :: pt_rhs ! tracer trend64 REAL(dp), DIMENSION(:,:,:,:), INTENT(inout) :: pt_rhs ! tracer trend 64 65 !! 65 66 CALL tra_ldf_lap_t( kt, Kmm, kit000, cdtype, pahu, pahv, is_tile(pahu), & … … 100 101 REAL(wp), DIMENSION(A2D_T(ktgi), KJPT), INTENT(in ) :: pgui, pgvi ! tracer gradient at top levels 101 102 REAL(wp), DIMENSION(A2D_T(ktt), JPK,KJPT), INTENT(in ) :: pt ! before tracer fields 102 REAL( wp), DIMENSION(A2D_T(ktt_rhs),JPK,KJPT), INTENT(inout) :: pt_rhs ! tracer trend103 REAL(dp), DIMENSION(A2D_T(ktt_rhs),JPK,KJPT), INTENT(inout) :: pt_rhs ! tracer trend 103 104 ! 104 105 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 121 122 & iom_use("uadv_salttr") .OR. iom_use("vadv_salttr") ) ) l_hst = .TRUE. 122 123 ENDIF 124 ! 125 l_hst = .FALSE. 126 l_ptr = .FALSE. 127 IF( cdtype == 'TRA' .AND. ( iom_use( 'sophtldf' ) .OR. iom_use( 'sopstldf' ) ) ) l_ptr = .TRUE. 128 IF( cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 129 & iom_use("uadv_salttr") .OR. iom_use("vadv_salttr") ) ) l_hst = .TRUE. 123 130 ! 124 131 ! !== Initialization of metric arrays used for all tracers ==! … … 203 210 REAL(wp), DIMENSION(jpi,jpj, kjpt), INTENT(in ) :: pgui, pgvi ! tracer gradient at top levels 204 211 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pt ! before and now tracer fields 205 REAL( wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pt_rhs ! tracer trend212 REAL(dp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pt_rhs ! tracer trend 206 213 ! 207 214 INTEGER :: ji, jj, jk, jn ! dummy loop indices 208 REAL( wp), DIMENSION(A2D(nn_hls),jpk,kjpt) :: zlap ! laplacian at t-point215 REAL(dp), DIMENSION(A2D(nn_hls),jpk,kjpt) :: zlap ! laplacian at t-point 209 216 REAL(wp), DIMENSION(A2D(nn_hls), kjpt) :: zglu, zglv ! bottom GRADh of the laplacian (u- and v-points) 210 217 REAL(wp), DIMENSION(A2D(nn_hls), kjpt) :: zgui, zgvi ! top GRADh of the laplacian (u- and v-points) … … 237 244 CALL lbc_lnk( 'traldf_lap_blp', zlap(:,:,:,:) , 'T', 1.0_wp ) ! Lateral boundary conditions (unchanged sign) 238 245 ! ! Partial top/bottom cell: GRADh( zlap ) 239 IF( ln_isfcav .AND. ln_zps ) THEN ; CALL zps_hde_isf( kt, Kmm, kjpt, zlap, zglu, zglv, zgui, zgvi ) ! both top & bottom240 ELSEIF( ln_zps ) THEN ; CALL zps_hde ( kt, Kmm, kjpt, zlap, zglu, zglv ) ! only bottom246 IF( ln_isfcav .AND. ln_zps ) THEN ; CALL zps_hde_isf( kt, Kmm, kjpt, zlap, zglu, zglv, zgui, zgvi ) 247 ELSEIF( ln_zps ) THEN ; CALL zps_hde ( kt, Kmm, kjpt, zlap, zglu, zglv ) 241 248 ENDIF 242 249 ! … … 244 251 ! 245 252 CASE ( np_blp ) ! iso-level bilaplacian 246 CALL tra_ldf_lap ( kt, Kmm, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pt_rhs, kjpt, 2 )253 CALL tra_ldf_lap ( kt, Kmm, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, CASTWP(zlap), pt_rhs, kjpt, 2 ) 247 254 CASE ( np_blp_i ) ! rotated bilaplacian : standard operator (Madec) 248 CALL tra_ldf_iso ( kt, Kmm, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pt , pt_rhs, kjpt, 2 )255 CALL tra_ldf_iso ( kt, Kmm, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, CASTWP(zlap), pt , pt_rhs, kjpt, 2 ) 249 256 CASE ( np_blp_it ) ! rotated bilaplacian : triad operator (griffies) 250 CALL tra_ldf_triad( kt, Kmm, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pt , pt_rhs, kjpt, 2 )257 CALL tra_ldf_triad( kt, Kmm, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, CASTWP(zlap), pt , pt_rhs, kjpt, 2 ) 251 258 END SELECT 252 259 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/traldf_triad.F90
r14090 r14219 43 43 # include "do_loop_substitute.h90" 44 44 # include "domzgr_substitute.h90" 45 # include "single_precision_substitute.h90" 45 46 !!---------------------------------------------------------------------- 46 47 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 65 66 REAL(wp), DIMENSION(:,:,:,:), INTENT(in ) :: pt ! tracer (kpass=1) or laplacian of tracer (kpass=2) 66 67 REAL(wp), DIMENSION(:,:,:,:), INTENT(in ) :: pt2 ! tracer (only used in kpass=2) 67 REAL( wp), DIMENSION(:,:,:,:), INTENT(inout) :: pt_rhs ! tracer trend68 REAL(dp), DIMENSION(:,:,:,:), INTENT(inout) :: pt_rhs ! tracer trend 68 69 !! 69 70 CALL tra_ldf_triad_t( kt, Kmm, kit000, cdtype, pahu, pahv, is_tile(pahu), & … … 107 108 REAL(wp), DIMENSION(A2D_T(ktt), JPK,KJPT), INTENT(in ) :: pt ! tracer (kpass=1) or laplacian of tracer (kpass=2) 108 109 REAL(wp), DIMENSION(A2D_T(ktt2), JPK,KJPT), INTENT(in ) :: pt2 ! tracer (only used in kpass=2) 109 REAL( wp), DIMENSION(A2D_T(ktt_rhs),JPK,KJPT), INTENT(inout) :: pt_rhs ! tracer trend110 REAL(dp), DIMENSION(A2D_T(ktt_rhs),JPK,KJPT), INTENT(inout) :: pt_rhs ! tracer trend 110 111 ! 111 112 INTEGER :: ji, jj, jk, jn ! dummy loop indices -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/tramle.F90
r14045 r14219 381 381 !!============================================================================== 382 382 END MODULE tramle 383 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/tranpc.F90
r14200 r14219 40 40 # include "do_loop_substitute.h90" 41 41 # include "domzgr_substitute.h90" 42 # include "single_precision_substitute.h90" 42 43 !!---------------------------------------------------------------------- 43 44 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 65 66 INTEGER, INTENT(in ) :: kt ! ocean time-step index 66 67 INTEGER, INTENT(in ) :: Kmm, Krhs, Kaa ! time level indices 67 REAL( wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation68 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation 68 69 ! 69 70 INTEGER :: ji, jj, jk ! dummy loop indices … … 102 103 ENDIF 103 104 ! 104 CALL eos_rab( pts(:,:,:,:,Kaa), zab, Kmm ) ! after alpha and beta (given on T-points)105 CALL bn2 ( pts(:,:,:,:,Kaa), zab, zn2, Kmm ) ! after Brunt-Vaisala (given on W-points)105 CALL eos_rab( CASTWP(pts(:,:,:,:,Kaa)), zab, Kmm ) ! after alpha and beta (given on T-points) 106 CALL bn2 ( CASTWP(pts(:,:,:,:,Kaa)), zab, zn2, Kmm ) ! after Brunt-Vaisala (given on W-points) 106 107 ! 107 108 IF( ntile == 0 .OR. ntile == 1 ) nnpcc = 0 ! Do only on the first tile -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/traqsr.F90
r14200 r14219 70 70 # include "do_loop_substitute.h90" 71 71 # include "domzgr_substitute.h90" 72 # include "single_precision_substitute.h90" 72 73 !!---------------------------------------------------------------------- 73 74 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 105 106 INTEGER, INTENT(in ) :: kt ! ocean time-step 106 107 INTEGER, INTENT(in ) :: Kmm, Krhs ! time level indices 107 REAL( wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation108 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation 108 109 ! 109 110 INTEGER :: ji, jj, jk ! dummy loop indices … … 324 325 ENDIF 325 326 ! ! print mean trends (used for debugging) 326 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1= pts(:,:,:,jp_tem,Krhs), clinfo1=' qsr - Ta: ', mask1=tmask, clinfo3='tra-ta' )327 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(pts(:,:,:,jp_tem,Krhs)), clinfo1=' qsr - Ta: ', mask1=tmask, clinfo3='tra-ta' ) 327 328 ! 328 329 IF( ln_timing ) CALL timing_stop('tra_qsr') -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/trasbc.F90
r14200 r14219 44 44 # include "do_loop_substitute.h90" 45 45 # include "domzgr_substitute.h90" 46 # include "single_precision_substitute.h90" 46 47 !!---------------------------------------------------------------------- 47 48 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 72 73 !! - send trends to trdtra module for further diagnostics(l_trdtra=T) 73 74 !!---------------------------------------------------------------------- 74 INTEGER, INTENT(in ) :: 75 INTEGER, INTENT(in ) :: 76 REAL( wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer Eq.75 INTEGER, INTENT(in ) :: kt ! ocean time-step index 76 INTEGER, INTENT(in ) :: Kmm, Krhs ! time level indices 77 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation 77 78 ! 78 79 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 225 226 ENDIF 226 227 ! 227 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1= pts(:,:,:,jp_tem,Krhs), clinfo1=' sbc - Ta: ', mask1=tmask, &228 & tab3d_2= pts(:,:,:,jp_sal,Krhs), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' )228 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(pts(:,:,:,jp_tem,Krhs)), clinfo1=' sbc - Ta: ', mask1=tmask, & 229 & tab3d_2=CASTWP(pts(:,:,:,jp_sal,Krhs)), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 229 230 ! 230 231 IF( ln_timing ) CALL timing_stop('tra_sbc') -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/trazdf.F90
r14200 r14219 40 40 # include "do_loop_substitute.h90" 41 41 # include "domzgr_substitute.h90" 42 # include "single_precision_substitute.h90" 42 43 !!---------------------------------------------------------------------- 43 44 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 55 56 INTEGER , INTENT(in) :: kt ! ocean time-step index 56 57 INTEGER , INTENT(in) :: Kbb, Kmm, Krhs, Kaa ! time level indices 57 REAL( wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation58 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation 58 59 ! 59 60 INTEGER :: ji, jj, jk ! Dummy loop indices … … 109 110 ENDIF 110 111 ! ! print mean trends (used for debugging) 111 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1= pts(:,:,:,jp_tem,Kaa), clinfo1=' zdf - Ta: ', mask1=tmask, &112 & tab3d_2= pts(:,:,:,jp_sal,Kaa), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' )112 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(pts(:,:,:,jp_tem,Kaa)), clinfo1=' zdf - Ta: ', mask1=tmask, & 113 & tab3d_2=CASTWP(pts(:,:,:,jp_sal,Kaa)), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 113 114 ! 114 115 IF( ln_timing ) CALL timing_stop('tra_zdf') … … 143 144 INTEGER , INTENT(in ) :: kjpt ! number of tracers 144 145 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 145 REAL( wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracers and RHS of tracer equation146 REAL(dp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracers and RHS of tracer equation 146 147 ! 147 148 INTEGER :: ji, jj, jk, jn ! dummy loop indices 148 REAL( wp) :: zrhs, zzwi, zzws ! local scalars149 REAL( wp), DIMENSION(A2D(nn_hls),jpk) :: zwi, zwt, zwd, zws149 REAL(dp) :: zrhs, zzwi, zzws ! local scalars 150 REAL(dp), DIMENSION(A2D(nn_hls),jpk) :: zwi, zwt, zwd, zws 150 151 !!--------------------------------------------------------------------- 151 152 ! … … 264 265 !!============================================================================== 265 266 END MODULE trazdf 267 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRA/zpshde.F90
r14200 r14219 47 47 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 48 48 INTEGER , INTENT(in ) :: kjpt ! number of tracers 49 REAL( wp), DIMENSION(:,:,:,:), INTENT(inout) :: pta ! 4D tracers fields49 REAL(dp), DIMENSION(:,:,:,:), INTENT(inout) :: pta ! 4D tracers fields 50 50 REAL(wp), DIMENSION(:,:,:) , INTENT( out) :: pgtu, pgtv ! hor. grad. of ptra at u- & v-pts 51 51 REAL(wp), DIMENSION(:,:,:) , INTENT(inout), OPTIONAL :: prd ! 3D density anomaly fields … … 111 111 INTEGER , INTENT(in ) :: kjpt ! number of tracers 112 112 INTEGER , INTENT(in ) :: ktta, ktgt, ktrd, ktgr 113 REAL( wp), DIMENSION(A2D_T(ktta),JPK,KJPT), INTENT(inout) :: pta ! 4D tracers fields113 REAL(dp), DIMENSION(A2D_T(ktta),JPK,KJPT), INTENT(inout) :: pta ! 4D tracers fields 114 114 REAL(wp), DIMENSION(A2D_T(ktgt) ,KJPT), INTENT( out) :: pgtu, pgtv ! hor. grad. of ptra at u- & v-pts 115 115 REAL(wp), DIMENSION(A2D_T(ktrd),JPK ), INTENT(inout), OPTIONAL :: prd ! 3D density anomaly fields … … 221 221 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 222 222 INTEGER , INTENT(in ) :: kjpt ! number of tracers 223 REAL( wp), DIMENSION(:,:,:,:), INTENT(inout) :: pta ! 4D tracers fields223 REAL(dp), DIMENSION(:,:,:,:), INTENT(inout) :: pta ! 4D tracers fields 224 224 REAL(wp), DIMENSION(:,:,:) , INTENT( out) :: pgtu, pgtv ! hor. grad. of ptra at u- & v-pts 225 225 REAL(wp), DIMENSION(:,:,:) , INTENT( out) :: pgtui, pgtvi ! hor. grad. of stra at u- & v-pts (ISF) … … 291 291 INTEGER , INTENT(in ) :: kjpt ! number of tracers 292 292 INTEGER , INTENT(in ) :: ktta, ktgt, ktgti, ktrd, ktgr, ktgri 293 REAL( wp), DIMENSION(A2D_T(ktta),JPK,KJPT), INTENT(inout) :: pta ! 4D tracers fields293 REAL(dp), DIMENSION(A2D_T(ktta),JPK,KJPT), INTENT(inout) :: pta ! 4D tracers fields 294 294 REAL(wp), DIMENSION(A2D_T(ktgt) ,KJPT), INTENT( out) :: pgtu, pgtv ! hor. grad. of ptra at u- & v-pts 295 295 REAL(wp), DIMENSION(A2D_T(ktgti) ,KJPT), INTENT( out) :: pgtui, pgtvi ! hor. grad. of stra at u- & v-pts (ISF) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRD/trddyn.F90
r13497 r14219 38 38 # include "do_loop_substitute.h90" 39 39 # include "domzgr_substitute.h90" 40 # include "single_precision_substitute.h90" 40 41 !!---------------------------------------------------------------------- 41 42 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 53 54 !! and/or mixed layer budget. 54 55 !!---------------------------------------------------------------------- 55 REAL( wp), DIMENSION(:,:,:), INTENT(inout) :: putrd, pvtrd ! U and V trends56 REAL(dp), DIMENSION(:,:,:), INTENT(inout) :: putrd, pvtrd ! U and V trends 56 57 INTEGER , INTENT(in ) :: ktrd ! trend index 57 58 INTEGER , INTENT(in ) :: kt ! time step … … 99 100 !! ** Purpose : output 3D trends using IOM 100 101 !!---------------------------------------------------------------------- 101 REAL( wp), DIMENSION(:,:,:), INTENT(inout) :: putrd, pvtrd ! U and V trends102 REAL(dp), DIMENSION(:,:,:), INTENT(inout) :: putrd, pvtrd ! U and V trends 102 103 INTEGER , INTENT(in ) :: ktrd ! trend index 103 104 INTEGER , INTENT(in ) :: kt ! time step … … 181 182 !!====================================================================== 182 183 END MODULE trddyn 184 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRD/trdglo.F90
r13497 r14219 53 53 # include "do_loop_substitute.h90" 54 54 # include "domzgr_substitute.h90" 55 # include "single_precision_substitute.h90" 55 56 !!---------------------------------------------------------------------- 56 57 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 68 69 !! 69 70 !!---------------------------------------------------------------------- 70 REAL( wp), DIMENSION(:,:,:), INTENT(inout) :: ptrdx ! Temperature or U trend71 REAL( wp), DIMENSION(:,:,:), INTENT(inout) :: ptrdy ! Salinity or V trend71 REAL(dp), DIMENSION(:,:,:), INTENT(inout) :: ptrdx ! Temperature or U trend 72 REAL(dp), DIMENSION(:,:,:), INTENT(inout) :: ptrdy ! Salinity or V trend 72 73 INTEGER , INTENT(in ) :: ktrd ! tracer trend index 73 74 CHARACTER(len=3) , INTENT(in ) :: ctype ! momentum or tracers trends type (='DYN'/'TRA') … … 202 203 zkepe(:,:,:) = 0._wp 203 204 204 CALL eos( ts(:,:,:,:,Kmm), rhd, rhop) ! now potential density205 CALL eos( CASTWP(ts(:,:,:,:,Kmm)), rhd, CASTWP(rhop) ) ! now potential density 205 206 206 207 zcof = 0.5_wp / rho0 ! Density flux at w-point -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRD/trdken.F90
r13295 r14219 78 78 ! 79 79 !!---------------------------------------------------------------------- 80 REAL( wp), DIMENSION(:,:,:), INTENT(inout) :: putrd, pvtrd ! U and V masked trends80 REAL(dp), DIMENSION(:,:,:), INTENT(inout) :: putrd, pvtrd ! U and V masked trends 81 81 INTEGER , INTENT(in ) :: ktrd ! trend index 82 82 INTEGER , INTENT(in ) :: kt ! time step … … 248 248 !!====================================================================== 249 249 END MODULE trdken 250 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRD/trdpen.F90
r13237 r14219 37 37 !! * Substitutions 38 38 # include "domzgr_substitute.h90" 39 # include "single_precision_substitute.h90" 39 40 !!---------------------------------------------------------------------- 40 41 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 79 80 IF( kt /= nkstp ) THEN ! full eos: set partial derivatives at the 1st call of kt time step 80 81 nkstp = kt 81 CALL eos_pen( ts(:,:,:,:,Kmm), rab_PE, zpe, Kmm )82 CALL eos_pen( CASTWP(ts(:,:,:,:,Kmm)), rab_PE, zpe, Kmm ) 82 83 CALL iom_put( "alphaPE", rab_pe(:,:,:,jp_tem) ) 83 84 CALL iom_put( "betaPE" , rab_pe(:,:,:,jp_sal) ) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRD/trdtra.F90
r14200 r14219 37 37 PUBLIC trd_tra ! called by all tra_... modules 38 38 39 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: trdtx, trdty, trdt ! use to store the temperature trends39 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: trdtx, trdty, trdt ! use to store the temperature trends 40 40 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: avt_evd ! store avt_evd to calculate EVD trend 41 41 … … 43 43 # include "do_loop_substitute.h90" 44 44 # include "domzgr_substitute.h90" 45 # include "single_precision_substitute.h90" 45 46 !!---------------------------------------------------------------------- 46 47 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 85 86 INTEGER :: jk ! loop indices 86 87 INTEGER :: i01 ! 0 or 1 87 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztrds ! 3D workspace 88 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zwt, zws, ztrdt ! 3D workspace 88 REAL(dp), DIMENSION(jpi,jpj,jpk) :: ztrds ! 3D workspace 89 REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdt 90 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zwt, zws ! 3D workspace 89 91 !!---------------------------------------------------------------------- 90 92 ! … … 204 206 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in ) :: pt ! now or before tracer 205 207 CHARACTER(len=1) , INTENT(in ) :: cdir ! X/Y/Z direction 206 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT( out) :: ptrd ! advective trend in one direction208 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT( out) :: ptrd ! advective trend in one direction 207 209 INTEGER, INTENT(in) :: Kmm ! time level index 208 210 ! … … 239 241 !! mixed layer budget. 240 242 !!---------------------------------------------------------------------- 241 REAL( wp), DIMENSION(:,:,:), INTENT(inout) :: ptrdx ! Temperature or U trend242 REAL( wp), DIMENSION(:,:,:), INTENT(inout) :: ptrdy ! Salinity or V trend243 REAL(dp), DIMENSION(:,:,:), INTENT(inout) :: ptrdx ! Temperature or U trend 244 REAL(dp), DIMENSION(:,:,:), INTENT(inout) :: ptrdy ! Salinity or V trend 243 245 INTEGER , INTENT(in ) :: ktrd ! tracer trend index 244 246 INTEGER , INTENT(in ) :: kt ! time step … … 253 255 254 256 ! ! Potential ENergy trends 255 IF( ln_PE_trd ) CALL trd_pen( ptrdx, ptrdy, ktrd, kt, rDt, Kmm )257 IF( ln_PE_trd ) CALL trd_pen( CASTWP(ptrdx), CASTWP(ptrdy), ktrd, kt, rDt, Kmm ) 256 258 257 259 ! ! Mixed layer trends for active tracers … … 269 271 270 272 SELECT CASE ( ktrd ) 271 CASE ( jptra_xad ) ; CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_xad, '3D' ) ! zonal advection272 CASE ( jptra_yad ) ; CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_yad, '3D' ) ! merid. advection273 CASE ( jptra_zad ) ; CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_zad, '3D' ) ! vertical advection274 CASE ( jptra_ldf ) ; CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_ldf, '3D' ) ! lateral diffusion275 CASE ( jptra_bbl ) ; CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_bbl, '3D' ) ! bottom boundary layer273 CASE ( jptra_xad ) ; CALL trd_mxl_zint( CASTWP(ptrdx), CASTWP(ptrdy), jpmxl_xad, '3D' ) 274 CASE ( jptra_yad ) ; CALL trd_mxl_zint( CASTWP(ptrdx), CASTWP(ptrdy), jpmxl_yad, '3D' ) 275 CASE ( jptra_zad ) ; CALL trd_mxl_zint( CASTWP(ptrdx), CASTWP(ptrdy), jpmxl_zad, '3D' ) 276 CASE ( jptra_ldf ) ; CALL trd_mxl_zint( CASTWP(ptrdx), CASTWP(ptrdy), jpmxl_ldf, '3D' ) 277 CASE ( jptra_bbl ) ; CALL trd_mxl_zint( CASTWP(ptrdx), CASTWP(ptrdy), jpmxl_bbl, '3D' ) 276 278 CASE ( jptra_zdf ) 277 IF( ln_traldf_iso ) THEN ; CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_ldf, '3D' ) ! lateral diffusion (K_z)278 ELSE ; CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_zdf, '3D' ) ! vertical diffusion (K_z)279 IF( ln_traldf_iso ) THEN ; CALL trd_mxl_zint( CASTWP(ptrdx), CASTWP(ptrdy), jpmxl_ldf, '3D' ) 280 ELSE ; CALL trd_mxl_zint( CASTWP(ptrdx), CASTWP(ptrdy), jpmxl_zdf, '3D' ) 279 281 ENDIF 280 CASE ( jptra_dmp ) ; CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_dmp, '3D' ) ! internal 3D restoring (tradmp)281 CASE ( jptra_qsr ) ; CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_for, '3D' ) ! air-sea : penetrative sol radiat282 CASE ( jptra_dmp ) ; CALL trd_mxl_zint( CASTWP(ptrdx), CASTWP(ptrdy), jpmxl_dmp, '3D' ) 283 CASE ( jptra_qsr ) ; CALL trd_mxl_zint( CASTWP(ptrdx), CASTWP(ptrdy), jpmxl_for, '3D' ) 282 284 CASE ( jptra_nsr ) ; ptrdx(:,:,2:jpk) = 0._wp ; ptrdy(:,:,2:jpk) = 0._wp 283 CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_for, '2D' ) ! air-sea : non penetr sol radiation284 CASE ( jptra_bbc ) ; CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_bbc, '3D' ) ! bottom bound cond (geoth flux)285 CASE ( jptra_npc ) ; CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_npc, '3D' ) ! non penetr convect adjustment286 CASE ( jptra_atf ) ; CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_atf, '3D' ) ! asselin time filter (last trend)285 CALL trd_mxl_zint( CASTWP(ptrdx), CASTWP(ptrdy), jpmxl_for, '2D' ) 286 CASE ( jptra_bbc ) ; CALL trd_mxl_zint( CASTWP(ptrdx), CASTWP(ptrdy), jpmxl_bbc, '3D' ) 287 CASE ( jptra_npc ) ; CALL trd_mxl_zint( CASTWP(ptrdx), CASTWP(ptrdy), jpmxl_npc, '3D' ) 288 CASE ( jptra_atf ) ; CALL trd_mxl_zint( CASTWP(ptrdx), CASTWP(ptrdy), jpmxl_atf, '3D' ) 287 289 ! 288 290 CALL trd_mxl( kt, rDt ) ! trends: Mixed-layer (output) … … 300 302 !! ** Purpose : output 3D tracer trends using IOM 301 303 !!---------------------------------------------------------------------- 302 REAL( wp), DIMENSION(:,:,:), INTENT(inout) :: ptrdx ! Temperature or U trend303 REAL( wp), DIMENSION(:,:,:), INTENT(inout) :: ptrdy ! Salinity or V trend304 REAL(dp), DIMENSION(:,:,:), INTENT(inout) :: ptrdx ! Temperature or U trend 305 REAL(dp), DIMENSION(:,:,:), INTENT(inout) :: ptrdy ! Salinity or V trend 304 306 INTEGER , INTENT(in ) :: ktrd ! tracer trend index 305 307 INTEGER , INTENT(in ) :: kt ! time step -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRD/trdtrc.F90
r13226 r14219 13 13 INTEGER :: kt, kjn, ktrd 14 14 INTEGER :: Kmm ! time level index 15 REAL( wp):: ptrtrd(:,:,:)15 REAL(dp):: ptrtrd(:,:,:) 16 16 WRITE(*,*) 'trd_trc : You should not have seen this print! error?', ptrtrd(1,1,1) 17 17 WRITE(*,*) ' " " : You should not have seen this print! error?', kjn, ktrd, kt -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/TRD/trdvor.F90
r13497 r14219 49 49 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:) :: vor_avrbn ! after vorticity at time step after the 50 50 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:) :: rotot ! begining of the NN_WRITE-1 timesteps 51 REAL( wp), SAVE, ALLOCATABLE, DIMENSION(:,:) :: vor_avrtot !52 REAL( wp), SAVE, ALLOCATABLE, DIMENSION(:,:) :: vor_avrres !53 REAL( wp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: vortrd ! curl of trends51 REAL(dp), SAVE, ALLOCATABLE, DIMENSION(:,:) :: vor_avrtot ! 52 REAL(dp), SAVE, ALLOCATABLE, DIMENSION(:,:) :: vor_avrres ! 53 REAL(dp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: vortrd ! curl of trends 54 54 55 55 CHARACTER(len=12) :: cvort … … 86 86 !! and make outputs (NetCDF format) 87 87 !!---------------------------------------------------------------------- 88 REAL( wp), DIMENSION(:,:,:), INTENT(inout) :: putrd, pvtrd ! U and V trends88 REAL(dp), DIMENSION(:,:,:), INTENT(inout) :: putrd, pvtrd ! U and V trends 89 89 INTEGER , INTENT(in ) :: ktrd ! trend index 90 90 INTEGER , INTENT(in ) :: kt ! time step … … 237 237 INTEGER , INTENT(in ) :: ktrd ! ocean trend index 238 238 INTEGER , INTENT(in ) :: Kmm ! time level index 239 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: putrdvor ! u vorticity trend240 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pvtrdvor ! v vorticity trend239 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: putrdvor ! u vorticity trend 240 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pvtrdvor ! v vorticity trend 241 241 ! 242 242 INTEGER :: ji, jj, jk ! dummy loop indices … … 400 400 401 401 ! Boundary conditions 402 CALL lbc_lnk_multi( 'trdvor', vor_avrtot, 'F', 1.0_wp , vor_avrres, 'F', 1.0_wp ) 402 CALL lbc_lnk_multi( 'trdvor', vor_avrtot, 'F', 1.0_wp & 403 & , vor_avrres, 'F', 1.0_wp ) 403 404 404 405 … … 458 459 !! from ocean surface down to control surface (NetCDF output) 459 460 !!---------------------------------------------------------------------- 460 REAL(wp) :: zjulian, zsto, zout 461 REAL(dp) :: zjulian 462 REAL(dp) :: zsto 463 REAL(dp) :: zout 461 464 CHARACTER (len=40) :: clhstnam 462 465 CHARACTER (len=40) :: clop … … 574 577 !!====================================================================== 575 578 END MODULE trdvor 579 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/USR/usrdef_hgr.F90
r13295 r14219 59 59 !! - define u- & v-surfaces (if gridsize reduction is used in some straits) (in m2) 60 60 !!---------------------------------------------------------------------- 61 REAL(wp), DIMENSION(:,:), INTENT(out) :: plamt, plamu, plamv, plamf ! longitude outputs [degrees] 62 REAL(wp), DIMENSION(:,:), INTENT(out) :: pphit, pphiu, pphiv, pphif ! latitude outputs [degrees] 61 REAL(dp), DIMENSION(:,:), INTENT(out) :: plamt 62 REAL(dp), DIMENSION(:,:), INTENT(out) :: plamf 63 REAL(wp), DIMENSION(:,:), INTENT(out) :: plamu, plamv ! longitude outputs [degrees] 64 REAL(dp), DIMENSION(:,:), INTENT(out) :: pphit 65 REAL(dp), DIMENSION(:,:), INTENT(out) :: pphif 66 REAL(wp), DIMENSION(:,:), INTENT(out) :: pphiu, pphiv ! latitude outputs [degrees] 63 67 INTEGER , INTENT(out) :: kff ! =1 Coriolis parameter computed here, =0 otherwise 64 68 REAL(wp), DIMENSION(:,:), INTENT(out) :: pff_f, pff_t ! Coriolis factor at f-point [1/s] 65 REAL(wp), DIMENSION(:,:), INTENT(out) :: pe1t, pe1u, pe1v, pe1f ! i-scale factors [m] 66 REAL(wp), DIMENSION(:,:), INTENT(out) :: pe2t, pe2u, pe2v, pe2f ! j-scale factors [m] 69 REAL(dp), DIMENSION(:,:), INTENT(out) :: pe1t 70 REAL(dp), DIMENSION(:,:), INTENT(out) :: pe1u 71 REAL(dp), DIMENSION(:,:), INTENT(out) :: pe1f 72 REAL(wp), DIMENSION(:,:), INTENT(out) :: pe1v ! i-scale factors [m] 73 REAL(dp), DIMENSION(:,:), INTENT(out) :: pe2t 74 REAL(dp), DIMENSION(:,:), INTENT(out) :: pe2v 75 REAL(dp), DIMENSION(:,:), INTENT(out) :: pe2f 76 REAL(wp), DIMENSION(:,:), INTENT(out) :: pe2u ! j-scale factors [m] 67 77 INTEGER , INTENT(out) :: ke1e2u_v ! =1 u- & v-surfaces computed here, =0 otherwise 68 78 REAL(wp), DIMENSION(:,:), INTENT(out) :: pe1e2u, pe1e2v ! u- & v-surfaces (if reduction in strait) [m2] -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/USR/usrdef_istate.F90
r14053 r14219 47 47 REAL(wp), DIMENSION(jpi,jpj,jpk) , INTENT(in ) :: pdept ! depth of t-point [m] 48 48 REAL(wp), DIMENSION(jpi,jpj,jpk) , INTENT(in ) :: ptmask ! t-point ocean mask [m] 49 REAL( wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT( out) :: pts ! T & S fields [Celsius ; g/kg]50 REAL( wp), DIMENSION(jpi,jpj,jpk) , INTENT( out) :: pu ! i-component of the velocity [m/s]51 REAL( wp), DIMENSION(jpi,jpj,jpk) , INTENT( out) :: pv ! j-component of the velocity [m/s]49 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts), INTENT( out) :: pts ! T & S fields [Celsius ; g/kg] 50 REAL(dp), DIMENSION(jpi,jpj,jpk) , INTENT( out) :: pu ! i-component of the velocity [m/s] 51 REAL(dp), DIMENSION(jpi,jpj,jpk) , INTENT( out) :: pv ! j-component of the velocity [m/s] 52 52 ! 53 53 INTEGER :: ji, jj, jk ! dummy loop indices … … 90 90 !!---------------------------------------------------------------------- 91 91 REAL(wp), DIMENSION(jpi,jpj,jpk) , INTENT(in ) :: ptmask ! t-point ocean mask [m] 92 REAL( wp), DIMENSION(jpi,jpj) , INTENT( out) :: pssh ! sea-surface height [m]92 REAL(dp), DIMENSION(jpi,jpj) , INTENT( out) :: pssh ! sea-surface height [m] 93 93 !!---------------------------------------------------------------------- 94 94 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/USR/usrdef_zgr.F90
r13286 r14219 53 53 REAL(wp), DIMENSION(:) , INTENT(out) :: pe3t_1d , pe3w_1d ! 1D grid-point depth [m] 54 54 REAL(wp), DIMENSION(:,:,:), INTENT(out) :: pdept, pdepw ! grid-point depth [m] 55 REAL(wp), DIMENSION(:,:,:), INTENT(out) :: pe3t , pe3u , pe3v , pe3f ! vertical scale factors [m] 55 REAL(dp), DIMENSION(:,:,:), INTENT(out) :: pe3t ! vertical scale factors [m] 56 REAL(wp), DIMENSION(:,:,:), INTENT(out) :: pe3u , pe3v , pe3f ! vertical scale factors [m] 56 57 REAL(wp), DIMENSION(:,:,:), INTENT(out) :: pe3w , pe3uw, pe3vw ! i-scale factors 57 58 INTEGER , DIMENSION(:,:) , INTENT(out) :: k_top, k_bot ! first & last ocean level … … 221 222 REAL(wp), DIMENSION(:) , INTENT(in ) :: pe3t_1d , pe3w_1d ! 1D vertical scale factors [m] 222 223 REAL(wp), DIMENSION(:,:,:), INTENT( out) :: pdept, pdepw ! grid-point depth [m] 223 REAL(wp), DIMENSION(:,:,:), INTENT( out) :: pe3t , pe3u , pe3v , pe3f ! vertical scale factors [m] 224 REAL(dp), DIMENSION(:,:,:), INTENT( out) :: pe3t ! vertical scale factors [m] 225 REAL(wp), DIMENSION(:,:,:), INTENT( out) :: pe3u , pe3v , pe3f ! vertical scale factors [m] 224 226 REAL(wp), DIMENSION(:,:,:), INTENT( out) :: pe3w , pe3uw, pe3vw ! - - - 225 227 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/ZDF/zdfdrg.F90
r13558 r14219 76 76 # include "do_loop_substitute.h90" 77 77 # include "domzgr_substitute.h90" 78 # include "single_precision_substitute.h90" 78 79 !!---------------------------------------------------------------------- 79 80 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 157 158 INTEGER , INTENT(in ) :: kt ! ocean time-step index 158 159 INTEGER , INTENT(in ) :: Kmm ! time level indices 159 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pub, pvb ! the two components of the before velocity160 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pua, pva ! the two components of the velocity tendency160 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pub, pvb ! the two components of the before velocity 161 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pua, pva ! the two components of the velocity tendency 161 162 !! 162 163 INTEGER :: ji, jj ! dummy loop indexes … … 164 165 REAL(wp) :: zm1_2dt ! local scalar 165 166 REAL(wp) :: zCdu, zCdv ! - - 166 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: ztrdu, ztrdv167 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: ztrdu, ztrdv 167 168 !!--------------------------------------------------------------------- 168 169 ! … … 209 210 ENDIF 210 211 ! ! print mean trends (used for debugging) 211 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1= pua, clinfo1=' bfr - Ua: ', mask1=umask, &212 & tab3d_2= pva, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' )212 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab3d_1=CASTWP(pua), clinfo1=' bfr - Ua: ', mask1=umask, & 213 & tab3d_2=CASTWP(pva), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 213 214 ! 214 215 END SUBROUTINE zdf_drg_exp -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/ZDF/zdfmfc.F90
r14072 r14219 59 59 # include "do_loop_substitute.h90" 60 60 # include "domzgr_substitute.h90" 61 # include "single_precision_substitute.h90" 61 62 !!---------------------------------------------------------------------- 62 63 !! NEMO/OCE 4.2 , NEMO Consortium (2018) … … 95 96 !!---------------------------------------------------------------------- 96 97 INTEGER , INTENT(in) :: Kmm, Krhs ! time level indices 97 REAL( wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation98 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation 98 99 REAL(wp), DIMENSION(jpi,jpj,jpk,2) :: ztsp ! T/S of the plume 99 100 REAL(wp), DIMENSION(jpi,jpj,jpk,2) :: ztse ! T/S at W point … … 106 107 REAL(wp), DIMENSION(jpi,jpj) :: zustar, zustar2 ! 107 108 REAL(wp), DIMENSION(jpi,jpj) :: zuws, zvws, zsws, zfnet ! 108 REAL(wp), DIMENSION(jpi,jpj) :: zfbuo, zrautbm1, zrautb, zraupl 109 REAL(wp), DIMENSION(jpi,jpj) :: zfbuo, zrautbm1 110 REAL(dp), DIMENSION(jpi,jpj) :: zrautb, zraupl 109 111 REAL(wp), DIMENSION(jpi,jpj) :: zwpsurf ! 110 112 REAL(wp), DIMENSION(jpi,jpj) :: zop0 , zsp0 ! … … 208 210 ! Compute the buoyancy acceleration on T-points at jk-1 209 211 zrautbm1(:,:) = zrautb(:,:) 210 CALL eos( pts (:,:,jk ,:,Kmm) , zrautb(:,:) )211 CALL eos( ztsp(:,:,jk-1,:) , zraupl(:,:) )212 CALL eos( CASTWP(pts (:,:,jk ,:,Kmm)) , zrautb(:,:) ) 213 CALL eos( CASTWP(ztsp(:,:,jk-1,: )) , zraupl(:,:) ) 212 214 213 215 zphm1(:,:) = zphm1(:,:) + grav * zrautbm1(:,:) * e3t(:,:,jk-1, Kmm) … … 376 378 ! 377 379 ! 378 CALL lbc_lnk_multi( 'zdfmfc', edmfm,'T',1. , edmfa,'T',1., edmfb,'T',1., edmfc,'T',1., edmftra(:,:,:,jp_tem),'T',1., edmftra(:,:,:,jp_sal),'T',1.)380 CALL lbc_lnk_multi( 'zdfmfc', edmfm,'T',1._wp, edmfa,'T',1._wp, edmfb,'T',1._wp, edmfc,'T',1._wp, edmftra(:,:,:,jp_tem),'T',1._wp, edmftra(:,:,:,jp_sal),'T',1._wp) 379 381 ! 380 382 END SUBROUTINE tra_mfc … … 383 385 SUBROUTINE diag_mfc( zdiagi, zdiagd, zdiags, p2dt, Kaa ) 384 386 385 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: zdiagi, zdiagd, zdiags ! inout: tridaig. terms387 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: zdiagi, zdiagd, zdiags ! inout: tridaig. terms 386 388 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 387 389 INTEGER , INTENT(in ) :: Kaa ! ocean time level indices … … 399 401 SUBROUTINE rhs_mfc( zrhs, jjn ) 400 402 401 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: zrhs ! inout: rhs trend403 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: zrhs ! inout: rhs trend 402 404 INTEGER , INTENT(in ) :: jjn ! tracer indices 403 405 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/ZDF/zdfosm.F90
r14072 r14219 150 150 # include "do_loop_substitute.h90" 151 151 # include "domzgr_substitute.h90" 152 # include "single_precision_substitute.h90" 152 153 !!---------------------------------------------------------------------- 153 154 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 1176 1177 END_3D 1177 1178 ! Lateral boundary conditions on final outputs for hbl, on T-grid (sign unchanged) 1178 CALL lbc_lnk_multi( 'zdfosm', hbl, 'T', 1. , dh, 'T', 1., hmle, 'T', 1.)1179 CALL lbc_lnk_multi( 'zdfosm', hbl, 'T', 1._wp, dh, 'T', 1._wp, hmle, 'T', 1._wp ) 1179 1180 ! Lateral boundary conditions on final outputs for gham[ts], on W-grid (sign unchanged) 1180 1181 ! Lateral boundary conditions on final outputs for gham[uv], on [UV]-grid (sign changed) … … 2752 2753 IF( lwp ) WRITE(numout,*) ' ===>>>> : calculating hbl computed from stratification' 2753 2754 ! w-level of the mixing and mixed layers 2754 CALL eos_rab( ts(:,:,:,:,Kmm), rab_n, Kmm )2755 CALL bn2( ts(:,:,:,:,Kmm), rab_n, rn2, Kmm)2755 CALL eos_rab( CASTWP(ts(:,:,:,:,Kmm)), rab_n, Kmm ) 2756 CALL bn2(CASTWP(ts(:,:,:,:,Kmm)), rab_n, rn2, Kmm) 2756 2757 imld_rst(:,:) = nlb10 ! Initialization to the number of w ocean point 2757 2758 hbl(:,:) = 0._wp ! here hbl used as a dummy variable, integrating vertically N^2 … … 2795 2796 INTEGER , INTENT(in) :: kt ! time step index 2796 2797 INTEGER , INTENT(in) :: Kmm, Krhs ! time level indices 2797 REAL( wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation2798 REAL(dp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation 2798 2799 ! 2799 2800 INTEGER :: ji, jj, jk … … 2832 2833 2833 2834 IF(sn_cfctl%l_prtctl) THEN 2834 CALL prt_ctl( tab3d_1= pts(:,:,:,jp_tem,Krhs), clinfo1=' osm - Ta: ', mask1=tmask, &2835 & tab3d_2= pts(:,:,:,jp_sal,Krhs), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' )2835 CALL prt_ctl( tab3d_1=CASTWP(pts(:,:,:,jp_tem,Krhs)), clinfo1=' osm - Ta: ', mask1=tmask, & 2836 & tab3d_2=CASTWP(pts(:,:,:,jp_sal,Krhs)), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 2836 2837 ENDIF 2837 2838 ! … … 2867 2868 INTEGER , INTENT( in ) :: kt ! ocean time step index 2868 2869 INTEGER , INTENT( in ) :: Kmm, Krhs ! ocean time level indices 2869 REAL( wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation2870 REAL(dp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! ocean velocities and RHS of momentum equation 2870 2871 ! 2871 2872 INTEGER :: ji, jj, jk ! dummy loop indices -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/ZDF/zdftke.F90
r14072 r14219 307 307 zWlc2(ji,jj) = 0.5_wp * z1_norm * ( MAX( ut0sd(ji,jj)*ztaui + vt0sd(ji,jj)*ztauj, 0._wp ) )**2 308 308 END_2D 309 CALL lbc_lnk ( 'zdftke', zWlc2, 'T', 1. )309 CALL lbc_lnk ( 'zdftke', zWlc2, 'T', 1._wp ) 310 310 ! 311 311 ELSE ! Surface Stokes drift deduced from surface stress -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/lib_fortran.F90
r13327 r14219 37 37 38 38 INTERFACE glob_sum 39 MODULE PROCEDURE glob_sum_1d, glob_sum_2d, glob_sum_3d 39 MODULE PROCEDURE glob_sum_1d_sp, glob_sum_2d_sp, glob_sum_3d_sp 40 MODULE PROCEDURE glob_sum_1d_dp, glob_sum_2d_dp, glob_sum_3d_dp 40 41 END INTERFACE 41 42 INTERFACE glob_sum_full 42 MODULE PROCEDURE glob_sum_full_2d, glob_sum_full_3d 43 MODULE PROCEDURE glob_sum_full_2d_sp, glob_sum_full_3d_sp 44 MODULE PROCEDURE glob_sum_full_2d_dp, glob_sum_full_3d_dp 43 45 END INTERFACE 44 46 INTERFACE local_sum … … 49 51 END INTERFACE 50 52 INTERFACE glob_min 51 MODULE PROCEDURE glob_min_2d, glob_min_3d 53 MODULE PROCEDURE glob_min_2d_sp, glob_min_3d_sp 54 MODULE PROCEDURE glob_min_2d_dp, glob_min_3d_dp 52 55 END INTERFACE 53 56 INTERFACE glob_max 54 MODULE PROCEDURE glob_max_2d, glob_max_3d 57 MODULE PROCEDURE glob_max_2d_sp, glob_max_3d_sp 58 MODULE PROCEDURE glob_max_2d_dp, glob_max_3d_dp 55 59 END INTERFACE 56 60 … … 74 78 # define GLOBSUM_CODE 75 79 76 # define DIM_1d 77 # define FUNCTION_GLOBSUM glob_sum_1d 78 # include "lib_fortran_generic.h90" 79 # undef FUNCTION_GLOBSUM 80 # undef DIM_1d 81 82 # define DIM_2d 83 # define OPERATION_GLOBSUM 84 # define FUNCTION_GLOBSUM glob_sum_2d 85 # include "lib_fortran_generic.h90" 86 # undef FUNCTION_GLOBSUM 87 # undef OPERATION_GLOBSUM 88 # define OPERATION_FULL_GLOBSUM 89 # define FUNCTION_GLOBSUM glob_sum_full_2d 90 # include "lib_fortran_generic.h90" 91 # undef FUNCTION_GLOBSUM 92 # undef OPERATION_FULL_GLOBSUM 93 # undef DIM_2d 94 95 # define DIM_3d 96 # define OPERATION_GLOBSUM 97 # define FUNCTION_GLOBSUM glob_sum_3d 98 # include "lib_fortran_generic.h90" 99 # undef FUNCTION_GLOBSUM 100 # undef OPERATION_GLOBSUM 101 # define OPERATION_FULL_GLOBSUM 102 # define FUNCTION_GLOBSUM glob_sum_full_3d 103 # include "lib_fortran_generic.h90" 104 # undef FUNCTION_GLOBSUM 105 # undef OPERATION_FULL_GLOBSUM 106 # undef DIM_3d 80 # define SINGLE_PRECISION 81 # define DIM_1d 82 # define FUNCTION_GLOBSUM glob_sum_1d_sp 83 # include "lib_fortran_generic.h90" 84 # undef FUNCTION_GLOBSUM 85 # undef DIM_1d 86 87 # define DIM_2d 88 # define OPERATION_GLOBSUM 89 # define FUNCTION_GLOBSUM glob_sum_2d_sp 90 # include "lib_fortran_generic.h90" 91 # undef FUNCTION_GLOBSUM 92 # undef OPERATION_GLOBSUM 93 # define OPERATION_FULL_GLOBSUM 94 # define FUNCTION_GLOBSUM glob_sum_full_2d_sp 95 # include "lib_fortran_generic.h90" 96 # undef FUNCTION_GLOBSUM 97 # undef OPERATION_FULL_GLOBSUM 98 # undef DIM_2d 99 100 # define DIM_3d 101 # define OPERATION_GLOBSUM 102 # define FUNCTION_GLOBSUM glob_sum_3d_sp 103 # include "lib_fortran_generic.h90" 104 # undef FUNCTION_GLOBSUM 105 # undef OPERATION_GLOBSUM 106 # define OPERATION_FULL_GLOBSUM 107 # define FUNCTION_GLOBSUM glob_sum_full_3d_sp 108 # include "lib_fortran_generic.h90" 109 # undef FUNCTION_GLOBSUM 110 # undef OPERATION_FULL_GLOBSUM 111 # undef DIM_3d 112 # undef SINGLE_PRECISION 113 ! Double Precision versions 114 # define DIM_1d 115 # define FUNCTION_GLOBSUM glob_sum_1d_dp 116 # include "lib_fortran_generic.h90" 117 # undef FUNCTION_GLOBSUM 118 # undef DIM_1d 119 120 # define DIM_2d 121 # define OPERATION_GLOBSUM 122 # define FUNCTION_GLOBSUM glob_sum_2d_dp 123 # include "lib_fortran_generic.h90" 124 # undef FUNCTION_GLOBSUM 125 # undef OPERATION_GLOBSUM 126 # define OPERATION_FULL_GLOBSUM 127 # define FUNCTION_GLOBSUM glob_sum_full_2d_dp 128 # include "lib_fortran_generic.h90" 129 # undef FUNCTION_GLOBSUM 130 # undef OPERATION_FULL_GLOBSUM 131 # undef DIM_2d 132 133 # define DIM_3d 134 # define OPERATION_GLOBSUM 135 # define FUNCTION_GLOBSUM glob_sum_3d_dp 136 # include "lib_fortran_generic.h90" 137 # undef FUNCTION_GLOBSUM 138 # undef OPERATION_GLOBSUM 139 # define OPERATION_FULL_GLOBSUM 140 # define FUNCTION_GLOBSUM glob_sum_full_3d_dp 141 # include "lib_fortran_generic.h90" 142 # undef FUNCTION_GLOBSUM 143 # undef OPERATION_FULL_GLOBSUM 144 # undef DIM_3d 107 145 108 146 # undef GLOBSUM_CODE 109 147 110 148 ! Single Precision versions 111 149 # define GLOBMINMAX_CODE 112 150 113 # define DIM_2d 114 # define OPERATION_GLOBMIN 115 # define FUNCTION_GLOBMINMAX glob_min_2d 116 # include "lib_fortran_generic.h90" 117 # undef FUNCTION_GLOBMINMAX 118 # undef OPERATION_GLOBMIN 119 # define OPERATION_GLOBMAX 120 # define FUNCTION_GLOBMINMAX glob_max_2d 121 # include "lib_fortran_generic.h90" 122 # undef FUNCTION_GLOBMINMAX 123 # undef OPERATION_GLOBMAX 124 # undef DIM_2d 125 126 # define DIM_3d 127 # define OPERATION_GLOBMIN 128 # define FUNCTION_GLOBMINMAX glob_min_3d 129 # include "lib_fortran_generic.h90" 130 # undef FUNCTION_GLOBMINMAX 131 # undef OPERATION_GLOBMIN 132 # define OPERATION_GLOBMAX 133 # define FUNCTION_GLOBMINMAX glob_max_3d 134 # include "lib_fortran_generic.h90" 135 # undef FUNCTION_GLOBMINMAX 136 # undef OPERATION_GLOBMAX 137 # undef DIM_3d 151 # define SINGLE_PRECISION 152 # define DIM_2d 153 # define OPERATION_GLOBMIN 154 # define FUNCTION_GLOBMINMAX glob_min_2d_sp 155 # include "lib_fortran_generic.h90" 156 # undef FUNCTION_GLOBMINMAX 157 # undef OPERATION_GLOBMIN 158 # define OPERATION_GLOBMAX 159 # define FUNCTION_GLOBMINMAX glob_max_2d_sp 160 # include "lib_fortran_generic.h90" 161 # undef FUNCTION_GLOBMINMAX 162 # undef OPERATION_GLOBMAX 163 # undef DIM_2d 164 165 # define DIM_3d 166 # define OPERATION_GLOBMIN 167 # define FUNCTION_GLOBMINMAX glob_min_3d_sp 168 # include "lib_fortran_generic.h90" 169 # undef FUNCTION_GLOBMINMAX 170 # undef OPERATION_GLOBMIN 171 # define OPERATION_GLOBMAX 172 # define FUNCTION_GLOBMINMAX glob_max_3d_sp 173 # include "lib_fortran_generic.h90" 174 # undef FUNCTION_GLOBMINMAX 175 # undef OPERATION_GLOBMAX 176 # undef DIM_3d 177 # undef SINGLE_PRECISION 178 ! Double Precision versions 179 # define DIM_2d 180 # define OPERATION_GLOBMIN 181 # define FUNCTION_GLOBMINMAX glob_min_2d_dp 182 # include "lib_fortran_generic.h90" 183 # undef FUNCTION_GLOBMINMAX 184 # undef OPERATION_GLOBMIN 185 # define OPERATION_GLOBMAX 186 # define FUNCTION_GLOBMINMAX glob_max_2d_dp 187 # include "lib_fortran_generic.h90" 188 # undef FUNCTION_GLOBMINMAX 189 # undef OPERATION_GLOBMAX 190 # undef DIM_2d 191 192 # define DIM_3d 193 # define OPERATION_GLOBMIN 194 # define FUNCTION_GLOBMINMAX glob_min_3d_dp 195 # include "lib_fortran_generic.h90" 196 # undef FUNCTION_GLOBMINMAX 197 # undef OPERATION_GLOBMIN 198 # define OPERATION_GLOBMAX 199 # define FUNCTION_GLOBMINMAX glob_max_3d_dp 200 # include "lib_fortran_generic.h90" 201 # undef FUNCTION_GLOBMINMAX 202 # undef OPERATION_GLOBMAX 203 # undef DIM_3d 138 204 # undef GLOBMINMAX_CODE 139 205 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/lib_fortran_generic.h90
r13226 r14219 1 #if defined SINGLE_PRECISION 2 # define TYPE REAL(sp) 3 #else 4 # define TYPE REAL(dp) 5 #endif 6 1 7 #if defined GLOBSUM_CODE 2 8 ! ! FUNCTION FUNCTION_GLOBSUM ! 3 9 # if defined DIM_1d 4 # define ARRAY_TYPE(i,j,k) REAL(wp), INTENT(in ) :: ARRAY_IN(i,j,k)10 # define ARRAY_TYPE(i,j,k) TYPE , INTENT(in ) :: ARRAY_IN(i,j,k) 5 11 # define ARRAY_IN(i,j,k) ptab(i) 6 12 # define ARRAY2_IN(i,j,k) ptab2(i) … … 10 16 # endif 11 17 # if defined DIM_2d 12 # define ARRAY_TYPE(i,j,k) REAL(wp), INTENT(in ) :: ARRAY_IN(i,j,k)18 # define ARRAY_TYPE(i,j,k) TYPE , INTENT(in ) :: ARRAY_IN(i,j,k) 13 19 # define ARRAY_IN(i,j,k) ptab(i,j) 14 20 # define ARRAY2_IN(i,j,k) ptab2(i,j) … … 17 23 # endif 18 24 # if defined DIM_3d 19 # define ARRAY_TYPE(i,j,k) REAL(wp), INTENT(in ) :: ARRAY_IN(i,j,k)25 # define ARRAY_TYPE(i,j,k) TYPE , INTENT(in ) :: ARRAY_IN(i,j,k) 20 26 # define ARRAY_IN(i,j,k) ptab(i,j,k) 21 27 # define ARRAY2_IN(i,j,k) ptab2(i,j,k) … … 34 40 CHARACTER(len=*), INTENT(in ) :: cdname ! name of the calling subroutine 35 41 ARRAY_TYPE(:,:,:) ! array on which operation is applied 36 REAL(wp):: FUNCTION_GLOBSUM42 TYPE :: FUNCTION_GLOBSUM 37 43 ! 38 44 !!----------------------------------------------------------------------- 39 !40 REAL(wp) :: FUNCTION_GLOB_OP ! global sum41 45 !! 42 46 COMPLEX(dp):: ctmp 43 REAL(wp):: ztmp47 TYPE :: ztmp 44 48 INTEGER :: ji, jj, jk ! dummy loop indices 45 49 INTEGER :: ipi, ipj, ipk ! dimensions … … 65 69 END FUNCTION FUNCTION_GLOBSUM 66 70 71 #undef TYPE 67 72 #undef ARRAY_TYPE 68 73 #undef ARRAY2_TYPE … … 77 82 ! ! FUNCTION FUNCTION_GLOBMINMAX ! 78 83 # if defined DIM_2d 79 # define ARRAY_TYPE(i,j,k) REAL(wp), INTENT(in ) :: ARRAY_IN(i,j,k)84 # define ARRAY_TYPE(i,j,k) TYPE , INTENT(in ) :: ARRAY_IN(i,j,k) 80 85 # define ARRAY_IN(i,j,k) ptab(i,j) 81 86 # define ARRAY2_IN(i,j,k) ptab2(i,j) … … 83 88 # endif 84 89 # if defined DIM_3d 85 # define ARRAY_TYPE(i,j,k) REAL(wp), INTENT(in ) :: ARRAY_IN(i,j,k)90 # define ARRAY_TYPE(i,j,k) TYPE , INTENT(in ) :: ARRAY_IN(i,j,k) 86 91 # define ARRAY_IN(i,j,k) ptab(i,j,k) 87 92 # define ARRAY2_IN(i,j,k) ptab2(i,j,k) … … 103 108 CHARACTER(len=*), INTENT(in ) :: cdname ! name of the calling subroutine 104 109 ARRAY_TYPE(:,:,:) ! array on which operation is applied 105 REAL(wp):: FUNCTION_GLOBMINMAX110 TYPE :: FUNCTION_GLOBMINMAX 106 111 ! 107 112 !!----------------------------------------------------------------------- 108 113 ! 109 REAL(wp) :: FUNCTION_GLOB_OP ! global sum110 114 !! 111 115 COMPLEX(dp):: ctmp … … 129 133 END FUNCTION FUNCTION_GLOBMINMAX 130 134 135 #undef TYPE 131 136 #undef ARRAY_TYPE 132 137 #undef ARRAY2_TYPE -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/oce.F90
r14064 r14219 21 21 !! dynamics and tracer fields 22 22 !! -------------------------- 23 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: uu , vv !: horizontal velocities [m/s]23 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: uu , vv !: horizontal velocities [m/s] 24 24 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ww !: vertical velocity [m/s] 25 25 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wi !: vertical vel. (adaptive-implicit) [m/s] 26 26 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hdiv !: horizontal divergence [s-1] 27 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:,:) :: ts !: 4D T-S fields [Celsius,psu]27 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:,:) :: ts !: 4D T-S fields [Celsius,psu] 28 28 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: rab_b, rab_n !: thermal/haline expansion coef. [Celsius-1,psu-1] 29 29 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: rn2b , rn2 !: brunt-vaisala frequency**2 [s-2] 30 30 ! 31 31 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: rhd !: in situ density anomalie rhd=(rho-rho0)/rho0 [no units] 32 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: rhop !: potential volumic mass [kg/m3]32 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: rhop !: potential volumic mass [kg/m3] 33 33 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: Cu_adv !: vertical Courant number (adaptive-implicit) 34 34 35 35 !! free surface 36 36 !! ------------ 37 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ssh, uu_b, vv_b !: SSH [m] and barotropic velocities [m/s] 37 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ssh 38 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: uu_b, vv_b !: SSH [m] and barotropic velocities [m/s] 38 39 39 40 !! Arrays at barotropic time step: ! befbefore! before ! now ! after ! 40 41 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ubb_e , ub_e , un_e , ua_e !: u-external velocity 41 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: vbb_e , vb_e , vn_e , va_e !: v-external velocity 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sshbb_e, sshb_e, sshn_e, ssha_e !: external ssh 43 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sshn_e , ssha_e 44 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sshbb_e, sshb_e !: external ssh 43 45 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hu_e !: external u-depth 44 46 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hv_e !: external v-depth -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/step.F90
r14200 r14219 57 57 !! * Substitutions 58 58 # include "do_loop_substitute.h90" 59 # include "single_precision_substitute.h90" 60 59 61 !!---------------------------------------------------------------------- 60 62 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 166 168 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 167 169 ! THERMODYNAMICS 168 CALL eos_rab( ts(:,:,:,:,Nbb), rab_b, Nnn ) ! before local thermal/haline expension ratio at T-points169 CALL eos_rab( ts(:,:,:,:,Nnn), rab_n, Nnn ) ! now local thermal/haline expension ratio at T-points170 CALL bn2 ( ts(:,:,:,:,Nbb), rab_b, rn2b, Nnn ) ! before Brunt-Vaisala frequency171 CALL bn2 ( ts(:,:,:,:,Nnn), rab_n, rn2, Nnn ) ! now Brunt-Vaisala frequency170 CALL eos_rab( CASTWP(ts(:,:,:,:,Nbb)), rab_b, Nnn ) ! before local thermal/haline expension ratio at T-points 171 CALL eos_rab( CASTWP(ts(:,:,:,:,Nnn)), rab_n, Nnn ) ! now local thermal/haline expension ratio at T-points 172 CALL bn2 ( CASTWP(ts(:,:,:,:,Nbb)), rab_b, rn2b, Nnn ) ! before Brunt-Vaisala frequency 173 CALL bn2 ( CASTWP(ts(:,:,:,:,Nnn)), rab_n, rn2, Nnn ) ! now Brunt-Vaisala frequency 172 174 173 175 ! VERTICAL PHYSICS … … 177 179 ! 178 180 IF( l_ldfslp ) THEN ! slope of lateral mixing 179 CALL eos( ts(:,:,:,:,Nbb), rhd, gdept_0(:,:,:) ) ! before in situ density181 CALL eos( CASTWP(ts(:,:,:,:,Nbb)), rhd, gdept_0(:,:,:) ) ! before in situ density 180 182 181 183 IF( ln_zps .AND. .NOT. ln_isfcav) & … … 204 206 CALL wzv ( kstp, Nbb, Nnn, Naa, ww ) ! now cross-level velocity 205 207 IF( ln_zad_Aimp ) CALL wAimp ( kstp, Nnn ) ! Adaptive-implicit vertical advection partitioning 206 CALL eos ( ts(:,:,:,:,Nnn), rhd, rhop, gdept(:,:,:,Nnn) ) ! now in situ density for hpg computation208 CALL eos ( CASTWP(ts(:,:,:,:,Nnn)), rhd, rhop, CASTWP(gdept(:,:,:,Nnn)) ) ! now in situ density for hpg computation 207 209 208 210 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/stpctl.F90
r14200 r14219 69 69 INTEGER , DIMENSION(9) :: iareasum, iareamin, iareamax 70 70 INTEGER , DIMENSION(3,4) :: iloc ! min/max loc indices 71 REAL(wp) :: zzz, zminsal, zmaxsal ! local real 72 REAL(wp), DIMENSION(9) :: zmax, zmaxlocal 71 REAL(dp) :: zzz, zminsal, zmaxsal ! local real 72 REAL(dp), DIMENSION(9) :: zmax 73 REAL(wp), DIMENSION(9) :: zmaxlocal 73 74 LOGICAL :: ll_wrtstp, ll_colruns, ll_wrtruns, ll_0oce 74 75 LOGICAL, DIMENSION(jpi,jpj,jpk) :: llmsk … … 188 189 ! 189 190 IF ( ln_SEOS.AND.(rn_b0==0._wp) ) THEN ! Discard checks on salinity 190 zmaxsal = + 1.e38! if not used in eos191 zminsal = - 1.e38191 zmaxsal = +HUGE(1._dp) ! if not used in eos 192 zminsal = -HUGE(1._dp) 192 193 ELSE 193 194 zmaxsal = 100._wp … … 297 298 INTEGER , DIMENSION(3) :: iareasum, iareamin, iareamax 298 299 INTEGER , DIMENSION(3,4) :: iloc ! min/max loc indices 299 REAL( wp) :: zzz ! local real300 REAL( wp), DIMENSION(3) :: zmax, zmaxlocal300 REAL(dp) :: zzz ! local real 301 REAL(dp), DIMENSION(3) :: zmax, zmaxlocal 301 302 LOGICAL :: ll_wrtstp, ll_colruns, ll_wrtruns, ll_0oce 302 303 LOGICAL, DIMENSION(jpi,jpj,jpk) :: llmsk … … 459 460 CHARACTER(len=*), INTENT( out) :: cdline 460 461 CHARACTER(len=*), INTENT(in ) :: cdprefix 461 REAL( wp), INTENT(in ) :: pval462 REAL(dp), INTENT(in ) :: pval 462 463 INTEGER, DIMENSION(3), INTENT(in ) :: kloc 463 464 INTEGER, INTENT(in ) :: kt, ksum, kmin, kmax -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/timing.F90
r14072 r14219 40 40 CHARACTER(LEN=20) :: surname 41 41 INTEGER :: rank 42 REAL( wp) :: t_cpu, t_clock, tsum_cpu, tsum_clock, tmax_cpu, tmax_clock, tmin_cpu, tmin_clock, tsub_cpu, tsub_clock42 REAL(dp) :: t_cpu, t_clock, tsum_cpu, tsum_clock, tmax_cpu, tmax_clock, tmin_cpu, tmin_clock, tsub_cpu, tsub_clock 43 43 INTEGER :: ncount, ncount_max, ncount_rate 44 44 INTEGER :: niter … … 51 51 TYPE alltimer 52 52 CHARACTER(LEN=20), DIMENSION(:), POINTER :: cname => NULL() 53 REAL( wp), DIMENSION(:), POINTER :: tsum_cpu => NULL()54 REAL( wp), DIMENSION(:), POINTER :: tsum_clock => NULL()53 REAL(dp), DIMENSION(:), POINTER :: tsum_cpu => NULL() 54 REAL(dp), DIMENSION(:), POINTER :: tsum_clock => NULL() 55 55 INTEGER, DIMENSION(:), POINTER :: niter => NULL() 56 56 TYPE(alltimer), POINTER :: next => NULL() … … 63 63 64 64 TYPE(timer), POINTER :: s_wrk => NULL() 65 REAL( wp) :: t_overclock, t_overcpu65 REAL(dp) :: t_overclock, t_overcpu 66 66 LOGICAL :: l_initdone = .FALSE. 67 67 INTEGER :: nsize 68 68 69 69 ! Variables for coarse grain timing 70 REAL( wp) :: tot_etime, tot_ctime71 REAL(kind= wp), DIMENSION(2) :: t_elaps, t_cpu72 REAL( wp), ALLOCATABLE, DIMENSION(:) :: all_etime, all_ctime70 REAL(dp) :: tot_etime, tot_ctime 71 REAL(kind=dp), DIMENSION(2) :: t_elaps, t_cpu 72 REAL(dp), ALLOCATABLE, DIMENSION(:) :: all_etime, all_ctime 73 73 INTEGER :: nfinal_count, ncount, ncount_rate, ncount_max 74 74 INTEGER, DIMENSION(8) :: nvalues … … 137 137 ! 138 138 INTEGER :: ifinal_count, iperiods 139 REAL( wp) :: zcpu_end, zmpitime,zcpu_raw,zclock_raw139 REAL(dp) :: zcpu_end, zmpitime,zcpu_raw,zclock_raw 140 140 ! 141 141 s_wrk => NULL() … … 219 219 !!---------------------------------------------------------------------- 220 220 INTEGER :: iperiods, istart_count, ifinal_count 221 REAL( wp) :: zdum221 REAL(dp) :: zdum 222 222 LOGICAL :: ll_f 223 223 CHARACTER(len=*), INTENT(in), OPTIONAL :: clname … … 296 296 LOGICAL :: ll_ord, ll_averep 297 297 CHARACTER(len=120) :: clfmt 298 REAL( wp), DIMENSION(:), ALLOCATABLE :: timing_glob299 REAL( wp) :: zsypd ! simulated years per day (Balaji 2017)300 REAL( wp) :: zperc, ztot298 REAL(dp), DIMENSION(:), ALLOCATABLE :: timing_glob 299 REAL(dp) :: zsypd ! simulated years per day (Balaji 2017) 300 REAL(dp) :: zperc, ztot 301 301 302 302 ll_averep = .TRUE. … … 642 642 INTEGER :: idum, icode 643 643 INTEGER, ALLOCATABLE, DIMENSION(:) :: iall_rank 644 REAL( wp) :: ztot_ratio645 REAL( wp) :: zmax_etime, zmax_ctime, zmax_ratio, zmin_etime, zmin_ctime, zmin_ratio646 REAL( wp) :: zavg_etime, zavg_ctime, zavg_ratio647 REAL( wp), ALLOCATABLE, DIMENSION(:) :: zall_ratio644 REAL(dp) :: ztot_ratio 645 REAL(dp) :: zmax_etime, zmax_ctime, zmax_ratio, zmin_etime, zmin_ctime, zmin_ratio 646 REAL(dp) :: zavg_etime, zavg_ctime, zavg_ratio 647 REAL(dp), ALLOCATABLE, DIMENSION(:) :: zall_ratio 648 648 CHARACTER(LEN=128), dimension(8) :: cllignes 649 649 CHARACTER(LEN=128) :: clhline, clstart_date, clfinal_date -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/AGE/trcsms_age.F90
r14200 r14219 29 29 REAL(wp), PUBLIC :: frac_add_age !: fraction of level nl_age below age_depth where it is incremented 30 30 31 # include "single_precision_substitute.h90" 31 32 32 33 !!---------------------------------------------------------------------- … … 56 57 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 57 58 58 IF( l_1st_euler .OR. ln_top_euler ) THEN59 tr(:,:,:,jp_age,Kbb) = tr(:,:,:,jp_age,Kmm)60 ENDIF61 62 59 63 60 DO jk = 1, nla_age -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/C14/trcsms_c14.F90
r13970 r14219 144 144 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 145 145 ! 146 CALL iom_rstput( kt, nitrst, numrtw, 'co2sbc', co2sbc ) ! These five need &147 CALL iom_rstput( kt, nitrst, numrtw, 'c14sbc', c14sbc ) ! & to be written &146 CALL iom_rstput( kt, nitrst, numrtw, 'co2sbc', co2sbc ) ! These five need & 147 CALL iom_rstput( kt, nitrst, numrtw, 'c14sbc', c14sbc ) ! & to be written & 148 148 CALL iom_rstput( kt, nitrst, numrtw, 'exch_co2', exch_co2 ) ! & for temporal & 149 149 CALL iom_rstput( kt, nitrst, numrtw, 'exch_c14', exch_c14 ) ! & averages & 150 CALL iom_rstput( kt, nitrst, numrtw, 'qtr_c14', qtr_c14 )! & to be coherent.150 CALL iom_rstput( kt, nitrst, numrtw, 'qtr_c14', qtr_c14 ) ! & to be coherent. 151 151 CALL iom_rstput( kt, nitrst, numrtw, 'qint_c14', qint_c14 ) ! Cumulative 152 152 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/MY_TRC/trcsms_my_trc.F90
r12377 r14219 43 43 INTEGER, INTENT(in) :: Kbb, Kmm, Krhs ! time level indices 44 44 INTEGER :: jn ! dummy loop index 45 REAL( wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrmyt45 REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrmyt 46 46 !!---------------------------------------------------------------------- 47 47 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P2Z/p2zbio.F90
r13295 r14219 59 59 # include "do_loop_substitute.h90" 60 60 # include "domzgr_substitute.h90" 61 # include "single_precision_substitute.h90" 61 62 !!---------------------------------------------------------------------- 62 63 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 368 369 WRITE(charout, FMT="('bio')") 369 370 CALL prt_ctl_info( charout, cdcomp = 'top' ) 370 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)371 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 371 372 ENDIF 372 373 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P2Z/p2zexp.F90
r13295 r14219 40 40 # include "do_loop_substitute.h90" 41 41 # include "domzgr_substitute.h90" 42 # include "single_precision_substitute.h90" 42 43 !!---------------------------------------------------------------------- 43 44 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 141 142 WRITE(charout, FMT="('exp')") 142 143 CALL prt_ctl_info( charout, cdcomp = 'top' ) 143 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)144 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 144 145 ENDIF 145 146 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P2Z/p2zopt.F90
r13497 r14219 41 41 # include "do_loop_substitute.h90" 42 42 # include "domzgr_substitute.h90" 43 # include "single_precision_substitute.h90" 43 44 !!---------------------------------------------------------------------- 44 45 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 126 127 WRITE(charout, FMT="('opt')") 127 128 CALL prt_ctl_info( charout, cdcomp = 'top' ) 128 CALL prt_ctl( tab4d_1= tr(:,:,:,:,Kmm), mask1=tmask, clinfo=ctrcnm )129 CALL prt_ctl( tab4d_1=CASTWP(tr(:,:,:,:,Kmm)), mask1=tmask, clinfo=ctrcnm ) 129 130 ENDIF 130 131 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P2Z/p2zsed.F90
r13295 r14219 34 34 # include "do_loop_substitute.h90" 35 35 # include "domzgr_substitute.h90" 36 # include "single_precision_substitute.h90" 36 37 !!---------------------------------------------------------------------- 37 38 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 110 111 WRITE(charout, FMT="('sed')") 111 112 CALL prt_ctl_info( charout, cdcomp = 'top' ) 112 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)113 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 113 114 ENDIF 114 115 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z/p4zagg.F90
r13295 r14219 26 26 !! * Substitutions 27 27 # include "do_loop_substitute.h90" 28 # include "single_precision_substitute.h90" 28 29 !!---------------------------------------------------------------------- 29 30 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 171 172 WRITE(charout, FMT="('agg')") 172 173 CALL prt_ctl_info( charout, cdcomp = 'top' ) 173 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)174 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 174 175 ENDIF 175 176 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z/p4zbio.F90
r13295 r14219 41 41 # include "do_loop_substitute.h90" 42 42 # include "domzgr_substitute.h90" 43 # include "single_precision_substitute.h90" 43 44 !!---------------------------------------------------------------------- 44 45 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 109 110 WRITE(charout, FMT="('bio ')") 110 111 CALL prt_ctl_info( charout, cdcomp = 'top' ) 111 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)112 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 112 113 ENDIF 113 114 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z/p4zfechem.F90
r13472 r14219 34 34 # include "do_loop_substitute.h90" 35 35 # include "domzgr_substitute.h90" 36 # include "single_precision_substitute.h90" 36 37 !!---------------------------------------------------------------------- 37 38 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 219 220 WRITE(charout, FMT="('fechem')") 220 221 CALL prt_ctl_info( charout, cdcomp = 'top' ) 221 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)222 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 222 223 ENDIF 223 224 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z/p4zflx.F90
r13295 r14219 55 55 # include "do_loop_substitute.h90" 56 56 # include "domzgr_substitute.h90" 57 # include "single_precision_substitute.h90" 57 58 !!---------------------------------------------------------------------- 58 59 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 179 180 WRITE(charout, FMT="('flx ')") 180 181 CALL prt_ctl_info( charout, cdcomp = 'top' ) 181 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)182 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 182 183 ENDIF 183 184 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z/p4zligand.F90
r13295 r14219 28 28 !! * Substitutions 29 29 # include "do_loop_substitute.h90" 30 # include "single_precision_substitute.h90" 30 31 !!---------------------------------------------------------------------- 31 32 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 90 91 WRITE(charout, FMT="('ligand1')") 91 92 CALL prt_ctl_info( charout, cdcomp = 'top' ) 92 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)93 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 93 94 ENDIF 94 95 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z/p4zlys.F90
r13295 r14219 37 37 !! * Substitutions 38 38 # include "do_loop_substitute.h90" 39 # include "single_precision_substitute.h90" 39 40 !!---------------------------------------------------------------------- 40 41 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 131 132 WRITE(charout, FMT="('lys ')") 132 133 CALL prt_ctl_info( charout, cdcomp = 'top' ) 133 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)134 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 134 135 ENDIF 135 136 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z/p4zmeso.F90
r13295 r14219 46 46 !! * Substitutions 47 47 # include "do_loop_substitute.h90" 48 # include "single_precision_substitute.h90" 48 49 !!---------------------------------------------------------------------- 49 50 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 247 248 WRITE(charout, FMT="('meso')") 248 249 CALL prt_ctl_info( charout, cdcomp = 'top' ) 249 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)250 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 250 251 ENDIF 251 252 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z/p4zmicro.F90
r13295 r14219 44 44 !! * Substitutions 45 45 # include "do_loop_substitute.h90" 46 # include "single_precision_substitute.h90" 46 47 !!---------------------------------------------------------------------- 47 48 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 203 204 WRITE(charout, FMT="('micro')") 204 205 CALL prt_ctl_info( charout, cdcomp = 'top' ) 205 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)206 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 206 207 ENDIF 207 208 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z/p4zmort.F90
r13295 r14219 31 31 !! * Substitutions 32 32 # include "do_loop_substitute.h90" 33 # include "single_precision_substitute.h90" 33 34 !!---------------------------------------------------------------------- 34 35 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 121 122 WRITE(charout, FMT="('nano')") 122 123 CALL prt_ctl_info( charout, cdcomp = 'top' ) 123 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)124 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 124 125 ENDIF 125 126 ! … … 193 194 WRITE(charout, FMT="('diat')") 194 195 CALL prt_ctl_info( charout, cdcomp = 'top' ) 195 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)196 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 196 197 ENDIF 197 198 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z/p4zpoc.F90
r13295 r14219 40 40 # include "do_loop_substitute.h90" 41 41 # include "domzgr_substitute.h90" 42 # include "single_precision_substitute.h90" 42 43 !!---------------------------------------------------------------------- 43 44 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 243 244 WRITE(charout, FMT="('poc1')") 244 245 CALL prt_ctl_info( charout, cdcomp = 'top' ) 245 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)246 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 246 247 ENDIF 247 248 … … 435 436 WRITE(charout, FMT="('poc2')") 436 437 CALL prt_ctl_info( charout, cdcomp = 'top' ) 437 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)438 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 438 439 ENDIF 439 440 ! … … 504 505 ! 505 506 alphan(1) = gamain(reminup, rshape, ifault) 506 reminp(1) = gamain(reminup, rshape+1.0 , ifault) * xremip / alphan(1)507 reminp(1) = gamain(reminup, rshape+1.0_wp, ifault) * xremip / alphan(1) 507 508 DO jn = 2, jcpoc-1 508 509 reminup = 1./ 400. * EXP( REAL(jn, wp) * remindelta) 509 510 remindown = 1. / 400. * EXP( REAL(jn-1, wp) * remindelta) 510 511 alphan(jn) = gamain(reminup, rshape, ifault) - gamain(remindown, rshape, ifault) 511 reminp(jn) = gamain(reminup, rshape+1.0 , ifault) - gamain(remindown, rshape+1.0, ifault)512 reminp(jn) = gamain(reminup, rshape+1.0_wp, ifault) - gamain(remindown, rshape+1.0_wp, ifault) 512 513 reminp(jn) = reminp(jn) * xremip / alphan(jn) 513 514 END DO 514 515 remindown = 1. / 400. * EXP( REAL(jcpoc-1, wp) * remindelta) 515 516 alphan(jcpoc) = 1.0 - gamain(remindown, rshape, ifault) 516 reminp(jcpoc) = 1.0 - gamain(remindown, rshape+1.0 , ifault)517 reminp(jcpoc) = 1.0 - gamain(remindown, rshape+1.0_wp, ifault) 517 518 reminp(jcpoc) = reminp(jcpoc) * xremip / alphan(jcpoc) 518 519 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z/p4zprod.F90
r13295 r14219 49 49 # include "do_loop_substitute.h90" 50 50 # include "domzgr_substitute.h90" 51 # include "single_precision_substitute.h90" 51 52 !!---------------------------------------------------------------------- 52 53 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 332 333 WRITE(charout, FMT="('prod')") 333 334 CALL prt_ctl_info( charout, cdcomp = 'top' ) 334 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)335 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 335 336 ENDIF 336 337 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z/p4zrem.F90
r13295 r14219 45 45 # include "do_loop_substitute.h90" 46 46 # include "domzgr_substitute.h90" 47 # include "single_precision_substitute.h90" 47 48 !!---------------------------------------------------------------------- 48 49 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 197 198 WRITE(charout, FMT="('rem1')") 198 199 CALL prt_ctl_info( charout, cdcomp = 'top' ) 199 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)200 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 200 201 ENDIF 201 202 … … 219 220 WRITE(charout, FMT="('rem2')") 220 221 CALL prt_ctl_info( charout, cdcomp = 'top' ) 221 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)222 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 222 223 ENDIF 223 224 … … 250 251 WRITE(charout, FMT="('rem3')") 251 252 CALL prt_ctl_info( charout, cdcomp = 'top' ) 252 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)253 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 253 254 ENDIF 254 255 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z/p4zsed.F90
r13546 r14219 40 40 # include "do_loop_substitute.h90" 41 41 # include "domzgr_substitute.h90" 42 # include "single_precision_substitute.h90" 42 43 !!---------------------------------------------------------------------- 43 44 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 316 317 WRITE(charout, fmt="('sed ')") 317 318 CALL prt_ctl_info( charout, cdcomp = 'top' ) 318 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)319 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 319 320 ENDIF 320 321 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z/p4zsink.F90
r13295 r14219 41 41 # include "do_loop_substitute.h90" 42 42 # include "domzgr_substitute.h90" 43 # include "single_precision_substitute.h90" 43 44 !!---------------------------------------------------------------------- 44 45 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 145 146 WRITE(charout, FMT="('sink')") 146 147 CALL prt_ctl_info( charout, cdcomp = 'top' ) 147 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)148 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 148 149 ENDIF 149 150 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z/p4zsms.F90
r14086 r14219 11 11 USE oce_trc ! shared variables between ocean and passive tracers 12 12 USE trc ! passive tracers common variables 13 USE trcdta ! 13 14 USE sms_pisces ! PISCES Source Minus Sink variables 14 15 USE p4zbio ! Biological model … … 368 369 IF(lwp) WRITE(numout,*) '~~~~~~~' 369 370 ENDIF 370 CALL iom_rstput( kt, nitrst, numrtw, 'PH', hi(:,:,:) 371 CALL iom_rstput( kt, nitrst, numrtw, 'Silicalim', xksi(:,:) 371 CALL iom_rstput( kt, nitrst, numrtw, 'PH', hi(:,:,:) ) 372 CALL iom_rstput( kt, nitrst, numrtw, 'Silicalim', xksi(:,:) ) 372 373 CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) ) 373 374 CALL iom_rstput( kt, nitrst, numrtw, 'tcflxcum', t_oce_co2_flx_cum ) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z/p5zmeso.F90
r13295 r14219 53 53 !! * Substitutions 54 54 # include "do_loop_substitute.h90" 55 # include "single_precision_substitute.h90" 55 56 !!---------------------------------------------------------------------- 56 57 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 360 361 WRITE(charout, FMT="('meso')") 361 362 CALL prt_ctl_info( charout, cdcomp = 'top' ) 362 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)363 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 363 364 ENDIF 364 365 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z/p5zmicro.F90
r13295 r14219 54 54 !! * Substitutions 55 55 # include "do_loop_substitute.h90" 56 # include "single_precision_substitute.h90" 56 57 !!---------------------------------------------------------------------- 57 58 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 307 308 WRITE(charout, FMT="('micro')") 308 309 CALL prt_ctl_info( charout, cdcomp = 'top' ) 309 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)310 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 310 311 ENDIF 311 312 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z/p5zmort.F90
r13295 r14219 35 35 !! * Substitutions 36 36 # include "do_loop_substitute.h90" 37 # include "single_precision_substitute.h90" 37 38 !!---------------------------------------------------------------------- 38 39 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 122 123 WRITE(charout, FMT="('nano')") 123 124 CALL prt_ctl_info( charout, cdcomp = 'top' ) 124 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)125 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 125 126 ENDIF 126 127 ! … … 180 181 WRITE(charout, FMT="('pico')") 181 182 CALL prt_ctl_info( charout, cdcomp = 'top' ) 182 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)183 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 183 184 ENDIF 184 185 ! … … 255 256 WRITE(charout, FMT="('diat')") 256 257 CALL prt_ctl_info( charout, cdcomp = 'top' ) 257 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)258 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 258 259 ENDIF 259 260 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P4Z/p5zprod.F90
r13295 r14219 53 53 # include "do_loop_substitute.h90" 54 54 # include "domzgr_substitute.h90" 55 # include "single_precision_substitute.h90" 55 56 !!---------------------------------------------------------------------- 56 57 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 462 463 WRITE(charout, FMT="('prod')") 463 464 CALL prt_ctl_info( charout, cdcomp = 'top' ) 464 CALL prt_ctl(tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)465 CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm) 465 466 ENDIF 466 467 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/SED/sedbtb.F90
r10222 r14219 60 60 ENDDO 61 61 62 CALL sed_mat( jpsol, jpoce, jpksedm1, zsol, dtsed / 2.0 )62 CALL sed_mat( jpsol, jpoce, jpksedm1, zsol, dtsed / 2.0_wp ) 63 63 64 64 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/SED/seddiff.F90
r10225 r14219 68 68 69 69 ! solves tridiagonal system 70 CALL sed_mat( jwpo4, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwpo4), dtsed2 / 2.0 )70 CALL sed_mat( jwpo4, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwpo4), dtsed2 / 2.0_wp ) 71 71 72 72 !--------------------------- … … 75 75 76 76 ! solves tridiagonal system 77 CALL sed_mat( jwnh4, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwnh4), dtsed2 / 2.0 77 CALL sed_mat( jwnh4, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwnh4), dtsed2 / 2.0_wp) 78 78 79 79 !--------------------------- … … 82 82 83 83 ! solves tridiagonal system 84 CALL sed_mat( jwfe2, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwfe2), dtsed2 / 2.0 )84 CALL sed_mat( jwfe2, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwfe2), dtsed2 / 2.0_wp ) 85 85 86 86 !--------------------------- … … 89 89 90 90 ! solves tridiagonal system 91 CALL sed_mat( jwh2s, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwh2s), dtsed2 / 2.0 )91 CALL sed_mat( jwh2s, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwh2s), dtsed2 / 2.0_wp ) 92 92 93 93 !--------------------------- … … 96 96 97 97 ! solves tridiagonal system 98 CALL sed_mat( jwso4, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwso4), dtsed2 / 2.0 )98 CALL sed_mat( jwso4, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwso4), dtsed2 / 2.0_wp ) 99 99 100 100 !--------------------------- … … 103 103 104 104 ! solves tridiagonal system 105 CALL sed_mat( jwoxy, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwoxy), dtsed2 / 2.0 )105 CALL sed_mat( jwoxy, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwoxy), dtsed2 / 2.0_wp ) 106 106 107 107 !--------------------------- … … 110 110 111 111 ! solves tridiagonal system 112 CALL sed_mat( jwno3, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwno3), dtsed2 / 2.0 )112 CALL sed_mat( jwno3, jpoce, jpksed, zrearat1, zrearat2, pwcp(:,:,jwno3), dtsed2 / 2.0_wp ) 113 113 114 CALL sed_mat( jwdic, jpoce, jpksed, zrearat1, zrearat2, sedligand(:,:), dtsed2 / 2.0 )114 CALL sed_mat( jwdic, jpoce, jpksed, zrearat1, zrearat2, sedligand(:,:), dtsed2 / 2.0_wp ) 115 115 116 116 IF( ln_timing ) CALL timing_stop('sed_diff') -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/SED/sedstp.F90
r13970 r14219 86 86 IF( kt == nitsed000 ) THEN 87 87 CALL iom_close( numrsr ) ! close input tracer restart file 88 IF(lrxios) CALL iom_context_finalize( cr_sedrst_cxt ) 89 ! IF(lwm) CALL FLUSH( numont ) ! flush namelist output 88 ! IF(lwm) CALL FLUSH( numont ) ! flush namelist output 90 89 ENDIF 91 90 IF( lrst_sed ) CALL sed_rst_wri( kt ) ! restart file output -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/SED/trcdmp_sed.F90
r14086 r14219 36 36 !! * Substitutions 37 37 # include "do_loop_substitute.h90" 38 # include "single_precision_substitute.h90" 38 39 !!---------------------------------------------------------------------- 39 40 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 78 79 INTEGER :: ji, jj, jk, jn, jl, ikt ! dummy loop indices 79 80 CHARACTER (len=22) :: charout 80 REAL( wp), DIMENSION(jpi,jpj,jpk) :: ztrcdta ! 3D workspace81 REAL(dp), DIMENSION(jpi,jpj,jpk) :: ztrcdta ! 3D workspace 81 82 !!---------------------------------------------------------------------- 82 83 ! … … 108 109 WRITE(charout, FMT="('dmp ')") 109 110 CALL prt_ctl_info( charout, cdcomp = 'top' ) 110 CALL prt_ctl( tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm,clinfo3='trd' )111 CALL prt_ctl( tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm,clinfo3='trd' ) 111 112 ENDIF 112 113 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/TRP/trcadv.F90
r14086 r14219 63 63 64 64 # include "domzgr_substitute.h90" 65 # include "single_precision_substitute.h90" 65 66 !!---------------------------------------------------------------------- 66 67 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 80 81 INTEGER , INTENT(in) :: kt ! ocean time-step index 81 82 INTEGER , INTENT(in) :: Kbb, Kmm, Krhs ! time level indices 82 REAL( wp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers and RHS of tracer equation83 REAL(dp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers and RHS of tracer equation 83 84 ! 84 85 INTEGER :: jk ! dummy loop index … … 127 128 ! 128 129 CASE ( np_CEN ) ! Centered : 2nd / 4th order 129 IF (nn_hls.EQ.2) CALL lbc_lnk( 'trcadv', ptr(:,:,:,:,Kmm), 'T', 1. )130 IF (nn_hls.EQ.2) CALL lbc_lnk( 'trcadv', ptr(:,:,:,:,Kmm), 'T', 1._wp) 130 131 CALL tra_adv_cen( kt, nittrc000,'TRC', zuu, zvv, zww, Kmm, ptr, jptra, Krhs, nn_cen_h, nn_cen_v ) 131 132 CASE ( np_FCT ) ! FCT : 2nd / 4th order 132 133 IF (nn_hls.EQ.2) THEN 133 CALL lbc_lnk_multi( 'trcadv', ptr(:,:,:,:,Kbb), 'T', 1. , ptr(:,:,:,:,Kmm), 'T', 1.)134 CALL lbc_lnk_multi( 'traadv', zuu(:,:,:), 'U', -1. , zvv(:,:,:), 'V', -1., zww(:,:,:), 'W', 1.)134 CALL lbc_lnk_multi( 'trcadv', ptr(:,:,:,:,Kbb), 'T', 1._wp, ptr(:,:,:,:,Kmm), 'T', 1._wp) 135 CALL lbc_lnk_multi( 'traadv', zuu(:,:,:), 'U', -1._wp, zvv(:,:,:), 'V', -1._wp, zww(:,:,:), 'W', 1._wp) 135 136 #if defined key_loop_fusion 136 137 CALL tra_adv_fct_lf( kt, nittrc000,'TRC', rDt_trc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs, nn_fct_h, nn_fct_v ) … … 143 144 CASE ( np_MUS ) ! MUSCL 144 145 IF (nn_hls.EQ.2) THEN 145 IF (nn_hls.EQ.2) CALL lbc_lnk( 'trcadv', ptr(:,:,:,:,Kbb), 'T', 1. )146 IF (nn_hls.EQ.2) CALL lbc_lnk( 'trcadv', ptr(:,:,:,:,Kbb), 'T', 1._wp) 146 147 #if defined key_loop_fusion 147 148 CALL tra_adv_mus_lf( kt, nittrc000,'TRC', rDt_trc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs, ln_mus_ups ) … … 153 154 END IF 154 155 CASE ( np_UBS ) ! UBS 155 IF (nn_hls.EQ.2) CALL lbc_lnk( 'trcadv', ptr(:,:,:,:,Kbb), 'T', 1. )156 IF (nn_hls.EQ.2) CALL lbc_lnk( 'trcadv', ptr(:,:,:,:,Kbb), 'T', 1._wp) 156 157 CALL tra_adv_ubs( kt, nittrc000,'TRC', rDt_trc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs, nn_ubs_v ) 157 158 CASE ( np_QCK ) ! QUICKEST 158 159 IF (nn_hls.EQ.2) THEN 159 CALL lbc_lnk_multi( 'trcadv', zuu(:,:,:), 'U', -1. , zvv(:,:,:), 'V', -1.)160 CALL lbc_lnk( 'traadv', ptr(:,:,:,:,Kbb), 'T', 1. )160 CALL lbc_lnk_multi( 'trcadv', zuu(:,:,:), 'U', -1._wp, zvv(:,:,:), 'V', -1._wp) 161 CALL lbc_lnk( 'traadv', ptr(:,:,:,:,Kbb), 'T', 1._wp) 161 162 END IF 162 163 CALL tra_adv_qck( kt, nittrc000,'TRC', rDt_trc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs ) … … 167 168 WRITE(charout, FMT="('adv ')") 168 169 CALL prt_ctl_info( charout, cdcomp = 'top' ) 169 CALL prt_ctl( tab4d_1= tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm, clinfo3='trd' )170 CALL prt_ctl( tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm, clinfo3='trd' ) 170 171 END IF 171 172 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/TRP/trcatf.F90
r14200 r14219 56 56 # include "do_loop_substitute.h90" 57 57 # include "domzgr_substitute.h90" 58 # include "single_precision_substitute.h90" 58 59 !!---------------------------------------------------------------------- 59 60 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 84 85 INTEGER , INTENT( in ) :: kt ! ocean time-step index 85 86 INTEGER , INTENT( in ) :: Kbb, Kmm, Kaa ! time level indices 86 REAL( wp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers87 REAL(dp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers 87 88 ! 88 89 INTEGER :: jk, jn ! dummy loop indices … … 162 163 # else 163 164 IF( ln_linssh ) THEN ; CALL tra_atf_fix( kt, Kbb, Kmm, Kaa, nittrc000, 'TRC', ptr, jptra ) ! linear ssh 164 ELSE ; CALL tra_atf_vvl( kt, Kbb, Kmm, Kaa, nittrc000, rn_Dt, 'TRC', ptr, sbc_trc, sbc_trc_b, jptra ) ! non-linear ssh165 ELSE ; CALL tra_atf_vvl( kt, Kbb, Kmm, Kaa, nittrc000, CASTWP(rn_Dt), 'TRC', ptr, sbc_trc, sbc_trc_b, jptra ) ! non-linear ssh 165 166 # endif 166 167 ENDIF … … 186 187 WRITE(charout, FMT="('nxt')") 187 188 CALL prt_ctl_info( charout, cdcomp = 'top' ) 188 CALL prt_ctl(tab4d_1= ptr(:,:,:,:,Kmm), mask1=tmask, clinfo=ctrcnm)189 CALL prt_ctl(tab4d_1=CASTWP(ptr(:,:,:,:,Kmm)), mask1=tmask, clinfo=ctrcnm) 189 190 ENDIF 190 191 ! … … 221 222 INTEGER , INTENT(in ) :: kt ! ocean time-step index 222 223 INTEGER , INTENT(in ) :: Kbb, Kmm, Kaa ! time level indices 223 REAL( wp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers224 REAL(dp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers 224 225 !! 225 226 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 294 295 INTEGER , INTENT(in ) :: kt ! ocean time-step index 295 296 INTEGER , INTENT(in ) :: Kbb, Kmm, Kaa ! time level indices 296 REAL( wp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers297 REAL(dp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers 297 298 !! 298 299 INTEGER :: ji, jj, jk, jn ! dummy loop indices -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/TRP/trcbbl.F90
r14086 r14219 30 30 PUBLIC trc_bbl ! routine called by trctrp.F90 31 31 32 # include "single_precision_substitute.h90" 32 33 !!---------------------------------------------------------------------- 33 34 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 48 49 INTEGER, INTENT( in ) :: kt ! ocean time-step 49 50 INTEGER, INTENT( in ) :: Kbb, Kmm, Krhs ! time level indices 50 REAL( wp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers and RHS of tracer equation51 REAL(dp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers and RHS of tracer equation 51 52 INTEGER :: jn ! loop index 52 53 CHARACTER (len=22) :: charout … … 69 70 IF( nn_bbl_ldf == 1 ) THEN 70 71 ! 71 CALL tra_bbl_dif( ptr(:,:,:,:,Kbb), ptr(:,:,:,:,Krhs), jptra, Kmm )72 CALL tra_bbl_dif( CASTWP(ptr(:,:,:,:,Kbb)), ptr(:,:,:,:,Krhs), jptra, Kmm ) 72 73 IF( sn_cfctl%l_prttrc ) THEN 73 74 WRITE(charout, FMT="(' bbl_dif')") ; CALL prt_ctl_info( charout, cdcomp = 'top' ) 74 CALL prt_ctl( tab4d_1= ptr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm, clinfo3='trd' )75 CALL prt_ctl( tab4d_1=CASTWP(ptr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm, clinfo3='trd' ) 75 76 ENDIF 76 77 ! … … 80 81 IF( nn_bbl_adv /= 0 ) THEN 81 82 ! 82 CALL tra_bbl_adv( ptr(:,:,:,:,Kbb), ptr(:,:,:,:,Krhs), jptra, Kmm )83 CALL tra_bbl_adv( CASTWP(ptr(:,:,:,:,Kbb)), ptr(:,:,:,:,Krhs), jptra, Kmm ) 83 84 IF( sn_cfctl%l_prttrc ) THEN 84 85 WRITE(charout, FMT="(' bbl_adv')") ; CALL prt_ctl_info( charout, cdcomp = 'top' ) 85 CALL prt_ctl( tab4d_1= ptr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm, clinfo3='trd' )86 CALL prt_ctl( tab4d_1=CASTWP(ptr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm, clinfo3='trd' ) 86 87 ENDIF 87 88 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/TRP/trcdmp.F90
r14086 r14219 47 47 # include "do_loop_substitute.h90" 48 48 # include "domzgr_substitute.h90" 49 # include "single_precision_substitute.h90" 49 50 !!---------------------------------------------------------------------- 50 51 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 86 87 INTEGER, INTENT(in ) :: kt ! ocean time-step index 87 88 INTEGER, INTENT(in ) :: Kbb, Kmm, Krhs ! time level indices 88 REAL( wp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers and RHS of tracer equation89 REAL(dp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers and RHS of tracer equation 89 90 ! 90 91 INTEGER :: ji, jj, jk, jn, jl ! dummy loop indices 91 92 CHARACTER (len=22) :: charout 92 93 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrtrd 93 REAL( wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrcdta ! 3D workspace94 REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrcdta ! 3D workspace 94 95 !!---------------------------------------------------------------------- 95 96 ! … … 151 152 WRITE(charout, FMT="('dmp ')") 152 153 CALL prt_ctl_info( charout, cdcomp = 'top' ) 153 CALL prt_ctl( tab4d_1= ptr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm, clinfo3='trd' )154 CALL prt_ctl( tab4d_1=CASTWP(ptr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm, clinfo3='trd' ) 154 155 ENDIF 155 156 ! … … 231 232 INTEGER :: ji , jj, jk, jn, jl, jc ! dummy loop indicesa 232 233 INTEGER :: isrow ! local index 233 REAL( wp), POINTER, DIMENSION(:,:,:) :: ztrcdta ! 3D workspace234 REAL(dp), POINTER, DIMENSION(:,:,:) :: ztrcdta ! 3D workspace 234 235 !!---------------------------------------------------------------------- 235 236 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/TRP/trcldf.F90
r14086 r14219 46 46 # include "do_loop_substitute.h90" 47 47 # include "domzgr_substitute.h90" 48 # include "single_precision_substitute.h90" 48 49 !!---------------------------------------------------------------------- 49 50 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 62 63 INTEGER, INTENT(in ) :: kt ! ocean time-step index 63 64 INTEGER, INTENT(in ) :: Kbb, Kmm, Krhs ! ocean time-level index 64 REAL( wp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers and RHS of tracer equation65 REAL(dp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers and RHS of tracer equation 65 66 ! 66 67 INTEGER :: ji, jj, jk, jn … … 94 95 CASE ( np_lap ) ! iso-level laplacian 95 96 CALL tra_ldf_lap ( kt, Kmm, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, & 96 & ptr(:,:,:,:,Kbb), ptr(:,:,:,:,Krhs), jptra, 1 )97 & CASTWP(ptr(:,:,:,:,Kbb)), ptr(:,:,:,:,Krhs), jptra, 1 ) 97 98 CASE ( np_lap_i ) ! laplacian : standard iso-neutral operator (Madec) 98 99 CALL tra_ldf_iso ( kt, Kmm, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, & 99 & ptr(:,:,:,:,Kbb), ptr(:,:,:,:,Kbb), ptr(:,:,:,:,Krhs), jptra, 1 )100 & CASTWP(ptr(:,:,:,:,Kbb)), CASTWP(ptr(:,:,:,:,Kbb)), ptr(:,:,:,:,Krhs), jptra, 1 ) 100 101 CASE ( np_lap_it ) ! laplacian : triad iso-neutral operator (griffies) 101 102 CALL tra_ldf_triad( kt, Kmm, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, & 102 & ptr(:,:,:,:,Kbb), ptr(:,:,:,:,Kbb), ptr(:,:,:,:,Krhs), jptra, 1 )103 & CASTWP(ptr(:,:,:,:,Kbb)), CASTWP(ptr(:,:,:,:,Kbb)), ptr(:,:,:,:,Krhs), jptra, 1 ) 103 104 CASE ( np_blp , np_blp_i , np_blp_it ) ! bilaplacian: all operator (iso-level, -neutral) 104 IF(nn_hls.EQ.2) CALL lbc_lnk( 'trc_ldf', ptr(:,:,:,:,Kbb), 'T',1. )105 IF(nn_hls.EQ.2) CALL lbc_lnk( 'trc_ldf', ptr(:,:,:,:,Kbb), 'T',1._wp) 105 106 CALL tra_ldf_blp ( kt, Kmm, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, & 106 & ptr(:,:,:,:,Kbb) , ptr(:,:,:,:,Krhs), jptra, nldf_trc )107 & CASTWP(ptr(:,:,:,:,Kbb)) , ptr(:,:,:,:,Krhs), jptra, nldf_trc ) 107 108 END SELECT 108 109 ! … … 118 119 WRITE(charout, FMT="('ldf ')") 119 120 CALL prt_ctl_info( charout, cdcomp = 'top' ) 120 CALL prt_ctl( tab4d_1= ptr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm, clinfo3='trd' )121 CALL prt_ctl( tab4d_1=CASTWP(ptr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm, clinfo3='trd' ) 121 122 ENDIF 122 123 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/TRP/trcrad.F90
r13324 r14219 33 33 !! * Substitutions 34 34 # include "do_loop_substitute.h90" 35 # include "single_precision_substitute.h90" 35 36 !!---------------------------------------------------------------------- 36 37 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 57 58 INTEGER, INTENT(in ) :: kt ! ocean time-step index 58 59 INTEGER, INTENT(in ) :: Kbb, Kmm ! time level indices 59 REAL( wp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers and RHS of tracer equation60 REAL(dp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers and RHS of tracer equation 60 61 ! 61 62 CHARACTER (len=22) :: charout … … 73 74 WRITE(charout, FMT="('rad')") 74 75 CALL prt_ctl_info( charout, cdcomp = 'top' ) 75 CALL prt_ctl( tab4d_1= ptr(:,:,:,:,Kbb), mask1=tmask, clinfo=ctrcnm )76 CALL prt_ctl( tab4d_1=CASTWP(ptr(:,:,:,:,Kbb)), mask1=tmask, clinfo=ctrcnm ) 76 77 ENDIF 77 78 ! … … 135 136 INTEGER , INTENT(in ) :: Kbb, Kmm ! time level indices 136 137 INTEGER , INTENT(in ) :: jp_sms0, jp_sms1 ! First & last index of the passive tracer model 137 REAL( wp), DIMENSION (jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! before and now traceur concentration138 REAL(dp), DIMENSION (jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! before and now traceur concentration 138 139 CHARACTER( len = 1), OPTIONAL , INTENT(in ) :: cpreserv ! flag to preserve content or not 139 140 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/TRP/trcsbc.F90
r14086 r14219 32 32 # include "do_loop_substitute.h90" 33 33 # include "domzgr_substitute.h90" 34 # include "single_precision_substitute.h90" 34 35 !!---------------------------------------------------------------------- 35 36 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 62 63 INTEGER, INTENT(in ) :: kt ! ocean time-step index 63 64 INTEGER, INTENT(in ) :: Kmm, Krhs ! time level indices 64 REAL( wp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers and RHS of tracer equation65 REAL(dp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers and RHS of tracer equation 65 66 ! 66 67 INTEGER :: ji, jj, jn ! dummy loop indices … … 189 190 IF( sn_cfctl%l_prttrc ) THEN 190 191 WRITE(charout, FMT="('sbc ')") ; CALL prt_ctl_info( charout, cdcomp = 'top' ) 191 CALL prt_ctl( tab4d_1= ptr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm, clinfo3='trd' )192 CALL prt_ctl( tab4d_1=CASTWP(ptr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm, clinfo3='trd' ) 192 193 ENDIF 193 194 IF( l_trdtrc ) DEALLOCATE( ztrtrd ) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/TRP/trctrp.F90
r14086 r14219 40 40 PUBLIC trc_trp ! called by trc_stp 41 41 42 # include "single_precision_substitute.h90" 42 43 !!---------------------------------------------------------------------- 43 44 !! NEMO/TOP 4.0 , NEMO Consortium (2018) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/TRP/trczdf.F90
r14086 r14219 27 27 PUBLIC trc_zdf ! called by step.F90 28 28 29 # include "single_precision_substitute.h90" 29 30 !!---------------------------------------------------------------------- 30 31 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 43 44 INTEGER , INTENT(in ) :: kt ! ocean time-step index 44 45 INTEGER , INTENT(in ) :: Kbb, Kmm, Krhs, Kaa ! ocean time level indices 45 REAL( wp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers and RHS of tracer equation46 REAL(dp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers and RHS of tracer equation 46 47 ! 47 48 INTEGER :: jk, jn … … 68 69 WRITE(charout, FMT="('zdf ')") 69 70 CALL prt_ctl_info( charout, cdcomp = 'top' ) 70 CALL prt_ctl( tab4d_1= tr(:,:,:,:,Kaa), mask1=tmask, clinfo=ctrcnm, clinfo3='trd' )71 CALL prt_ctl( tab4d_1=CASTWP(tr(:,:,:,:,Kaa)), mask1=tmask, clinfo=ctrcnm, clinfo3='trd' ) 71 72 END IF 72 73 ! -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/TRP/trdmxl_trc.F90
r13497 r14219 419 419 !-- Lateral boundary conditions 420 420 IF ( cn_cfg .NE. 'gyre' ) THEN 421 CALL lbc_lnk_multi( 'trdmxl_trc', ztmltot(:,:,jn) , 'T', 1. , ztmlres(:,:,jn) , 'T', 1., &422 & ztmlatf(:,:,jn) , 'T', 1. , ztmlrad(:,:,jn) , 'T', 1.)421 CALL lbc_lnk_multi( 'trdmxl_trc', ztmltot(:,:,jn) , 'T', 1._wp , ztmlres(:,:,jn) , 'T', 1._wp, & 422 & ztmlatf(:,:,jn) , 'T', 1._wp , ztmlrad(:,:,jn) , 'T', 1._wp ) 423 423 ENDIF 424 424 … … 470 470 !-- Lateral boundary conditions 471 471 IF ( cn_cfg .NE. 'gyre' ) THEN ! other than GYRE configuration 472 CALL lbc_lnk_multi( 'trdmxl_trc', ztmltot2(:,:,jn), 'T', 1., ztmlres2(:,:,jn), 'T', 1. 472 CALL lbc_lnk_multi( 'trdmxl_trc', ztmltot2(:,:,jn), 'T', 1., ztmlres2(:,:,jn), 'T', 1.) 473 473 DO jl = 1, jpltrd_trc 474 474 CALL lbc_lnk( 'trdmxl_trc', ztmltrd2(:,:,jl,jn), 'T', 1. ) ! will be output in the NetCDF trends file … … 986 986 !!====================================================================== 987 987 END MODULE trdmxl_trc 988 -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/TRP/trdtrc.F90
r13226 r14219 41 41 INTEGER, INTENT( in ) :: kjn ! tracer index 42 42 INTEGER, INTENT( in ) :: ktrd ! tracer trend index 43 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) :: ptrtrd ! Temperature or U trend43 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) :: ptrtrd ! Temperature or U trend 44 44 CHARACTER (len=20) :: cltra 45 45 !!---------------------------------------------------------------------- … … 119 119 INTEGER , INTENT( in ) :: kjn ! tracer index 120 120 INTEGER , INTENT( in ) :: ktrd ! tracer trend index 121 REAL( wp), DIMENSION(:,:,:), INTENT( inout ) :: ptrtrd ! Temperature or U trend121 REAL(dp), DIMENSION(:,:,:), INTENT( inout ) :: ptrtrd ! Temperature or U trend 122 122 WRITE(*,*) 'trd_trc : You should not have seen this print! error?', ptrtrd(1,1,1) 123 123 WRITE(*,*) ' " " : You should not have seen this print! error?', kjn -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/trc.F90
r14032 r14219 31 31 REAL(wp), PUBLIC :: areatot !: total volume 32 32 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) :: cvol !: volume correction -degrad option- 33 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:,:) :: tr !: tracer concentration33 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:,:) :: tr !: tracer concentration 34 34 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) :: sbc_trc_b !: Before sbc fluxes for tracers 35 35 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) :: sbc_trc !: Now sbc fluxes for tracers -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/trcais.F90
r14200 r14219 143 143 INTEGER , INTENT(in) :: kt ! ocean time-step index 144 144 INTEGER , INTENT(in) :: Kmm, Krhs ! time level indices 145 REAL( wp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers and RHS of tracer equation145 REAL(dp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers and RHS of tracer equation 146 146 !! 147 147 INTEGER :: ji, jj, jk, jn, jl ! Loop index -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/trcbc.F90
r13295 r14219 352 352 INTEGER , INTENT(in) :: Kmm, Krhs ! time level indices 353 353 INTEGER , INTENT(in), OPTIONAL :: jit ! subcycle time-step index (for timesplitting option) 354 REAL( wp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers and RHS of tracer equation354 REAL(dp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers and RHS of tracer equation 355 355 !! 356 356 INTEGER :: ji, jj, jk, jn, jl ! Loop index -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/trcdta.F90
r14086 r14219 167 167 INTEGER , INTENT(in ) :: kt ! ocean time-step 168 168 INTEGER , INTENT(in ) :: kjl ! tracer index 169 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(inout ) :: ptrcdta ! 3D data array169 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(inout ) :: ptrcdta ! 3D data array 170 170 ! 171 171 INTEGER :: ji, jj, jk, jl, jkk, ik ! dummy loop indices -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/trcini.F90
r14086 r14219 34 34 35 35 # include "domzgr_substitute.h90" 36 # include "single_precision_substitute.h90" 36 37 !!---------------------------------------------------------------------- 37 38 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 131 132 WRITE(charout, FMT="('ini ')") 132 133 CALL prt_ctl_info( charout, cdcomp = 'top' ) 133 CALL prt_ctl( tab4d_1= tr(:,:,:,:,Kmm), mask1=tmask, clinfo=ctrcnm)134 CALL prt_ctl( tab4d_1=CASTWP(tr(:,:,:,:,Kmm)), mask1=tmask, clinfo=ctrcnm) 134 135 ENDIF 135 136 9000 FORMAT(' tracer nb : ',i2,' name :',a10,' initial content :',e18.10) -
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/trcsms.F90
r13286 r14219 26 26 27 27 PUBLIC trc_sms ! called in trcstp.F90 28 29 !! * Substitutions 30 # include "single_precision_substitute.h90" 28 31 29 32 !!---------------------------------------------------------------------- … … 59 62 WRITE(charout, FMT="('sms ')") 60 63 CALL prt_ctl_info( charout, cdcomp = 'top' ) 61 CALL prt_ctl( tab4d_1= tr(:,:,:,:,Kmm), mask1=tmask, clinfo=ctrcnm )64 CALL prt_ctl( tab4d_1=CASTWP(tr(:,:,:,:,Kmm)), mask1=tmask, clinfo=ctrcnm ) 62 65 ENDIF 63 66 !
Note: See TracChangeset
for help on using the changeset viewer.