Changeset 15540 for NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA
- Timestamp:
- 2021-11-26T12:27:56+01:00 (3 years ago)
- Location:
- NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/dia25h.F90
r12489 r15540 25 25 ! variables for calculating 25-hourly means 26 26 INTEGER , SAVE :: cnt_25h ! Counter for 25 hour means 27 REAL( wp), SAVE :: r1_25 = 0.04_wp ! =1/2528 REAL( wp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: tn_25h , sn_25h29 REAL( wp), SAVE, ALLOCATABLE, DIMENSION(:,:) :: sshn_25h30 REAL( wp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: un_25h , vn_25h , wn_25h31 REAL( wp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: avt_25h , avm_25h32 REAL( wp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: en_25h , rmxln_25h27 REAL(dp), SAVE :: r1_25 = 0.04_wp ! =1/25 28 REAL(dp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: tn_25h , sn_25h 29 REAL(dp), SAVE, ALLOCATABLE, DIMENSION(:,:) :: sshn_25h 30 REAL(dp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: un_25h , vn_25h , wn_25h 31 REAL(dp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: avt_25h , avm_25h 32 REAL(dp), SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: en_25h , rmxln_25h 33 33 34 34 !!---------------------------------------------------------------------- … … 130 130 INTEGER :: iyear0, nimonth0,iday0 ! start year,imonth,day 131 131 LOGICAL :: ll_print = .FALSE. ! =T print and flush numout 132 REAL( wp) :: zsto, zout, zmax, zjulian, zmdi ! local scalars132 REAL(dp) :: zsto, zout, zmax, zjulian, zmdi ! local scalars 133 133 INTEGER :: i_steps ! no of timesteps per hour 134 REAL( wp), DIMENSION(jpi,jpj ) :: zw2d, un_dm, vn_dm ! workspace135 REAL( wp), DIMENSION(jpi,jpj,jpk) :: zw3d ! workspace136 REAL( wp), DIMENSION(jpi,jpj,3) :: zwtmb ! workspace134 REAL(dp), DIMENSION(jpi,jpj ) :: zw2d, un_dm, vn_dm ! workspace 135 REAL(dp), DIMENSION(jpi,jpj,jpk) :: zw3d ! workspace 136 REAL(dp), DIMENSION(jpi,jpj,3) :: zwtmb ! workspace 137 137 !!---------------------------------------------------------------------- 138 138 -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/diaar5.F90
r14986 r15540 30 30 PUBLIC dia_ar5_hst ! heat/salt transport 31 31 32 REAL( wp) :: vol0 ! ocean volume (interior domain)33 REAL( wp) :: area_tot ! total ocean surface (interior domain)32 REAL(dp) :: vol0 ! ocean volume (interior domain) 33 REAL(dp) :: area_tot ! total ocean surface (interior domain) 34 34 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,: ) :: thick0 ! ocean thickness (interior domain) 35 35 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sn0 ! initial salinity … … 78 78 ! 79 79 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zarea_ssh , zbotpres ! 2D workspace 80 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: z2d, zpe ! 2D workspace 81 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: z3d, zrhd, ztpot, zgdept ! 3D workspace (zgdept: needed to use the substitute) 80 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: z2d! 2D workspace 81 REAL(dp), ALLOCATABLE, DIMENSION(:,:) :: zpe! 2D workspace 82 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zgdept! 3D workspace (zgdept: needed to use the substitute) 83 REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) :: z3d, zrhd, ztpot! 3D workspace (zgdept: needed to use the substitute) 82 84 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: ztsn ! 4D workspace 83 85 … … 137 139 zgdept(:,:,jk) = gdept(:,:,jk,Kmm) 138 140 END DO 139 CALL eos( ztsn, zrhd, zgdept) ! now in situ density using initial salinity141 CALL eos( CASTDP(ztsn), zrhd, CASTDP(zgdept)) ! now in situ density using initial salinity 140 142 ! 141 143 zbotpres(:,:) = 0._wp ! no atmospheric surface pressure, levitating sea-ice … … 232 234 ztpot(:,:,jpk) = 0._wp 233 235 DO jk = 1, jpkm1 234 ztpot(:,:,jk) = eos_pt_from_ct( CASTWP(ts(:,:,jk,jp_tem,Kmm)), CASTWP(ts(:,:,jk,jp_sal,Kmm)) )236 ztpot(:,:,jk) = eos_pt_from_ct( ts(:,:,jk,jp_tem,Kmm), ts(:,:,jk,jp_sal,Kmm) ) 235 237 END DO 236 238 ! … … 315 317 INTEGER , INTENT(in ) :: ktra ! tracer index 316 318 CHARACTER(len=3) , INTENT(in) :: cptr ! transport type 'adv'/'ldf' 317 REAL( wp), DIMENSION(A2D(nn_hls),jpk) , INTENT(in) :: puflx ! u-flux of advection/diffusion318 REAL( wp), DIMENSION(A2D(nn_hls),jpk) , INTENT(in) :: pvflx ! v-flux of advection/diffusion319 REAL(dp), DIMENSION(A2D(nn_hls),jpk) , INTENT(in) :: puflx ! u-flux of advection/diffusion 320 REAL(dp), DIMENSION(A2D(nn_hls),jpk) , INTENT(in) :: pvflx ! v-flux of advection/diffusion 319 321 ! 320 322 INTEGER :: ji, jj, jk 321 REAL( wp), DIMENSION(A2D(nn_hls)) :: z2d323 REAL(dp), DIMENSION(A2D(nn_hls)) :: z2d 322 324 323 325 z2d(:,:) = puflx(:,:,1) … … 360 362 INTEGER :: ji, jj, jk ! dummy loop indices 361 363 REAL(wp) :: zztmp 362 REAL( wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: zsaldta ! Jan/Dec levitus salinity364 REAL(dp), ALLOCATABLE, DIMENSION(:,:,:,:) :: zsaldta ! Jan/Dec levitus salinity 363 365 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zvol0 364 366 ! -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/diacfl.F90
r14644 r15540 27 27 ! 28 28 INTEGER, DIMENSION(3) :: nCu_loc, nCv_loc, nCw_loc ! U, V, and W run max locations in the global domain 29 REAL( wp) :: rCu_max, rCv_max, rCw_max ! associated run max Courant number29 REAL(dp) :: rCu_max, rCv_max, rCw_max ! associated run max Courant number 30 30 31 31 PUBLIC dia_cfl ! routine called by step.F90 … … 53 53 ! 54 54 INTEGER :: ji, jj, jk ! dummy loop indices 55 REAL( wp) :: zCu_max, zCv_max, zCw_max ! local scalars55 REAL(dp) :: zCu_max, zCv_max, zCw_max ! local scalars 56 56 INTEGER , DIMENSION(3) :: iloc_u , iloc_v , iloc_w , iloc ! workspace 57 REAL( wp), DIMENSION(jpi,jpj,jpk) :: zCu_cfl, zCv_cfl, zCw_cfl ! workspace57 REAL(dp), DIMENSION(jpi,jpj,jpk) :: zCu_cfl, zCv_cfl, zCw_cfl ! workspace 58 58 LOGICAL , DIMENSION(jpi,jpj,jpk) :: llmsk 59 59 !!---------------------------------------------------------------------- -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/diadct.F90
r14219 r15540 61 61 62 62 TYPE COORD_SECTION 63 REAL( wp) :: lon,lat63 REAL(dp) :: lon,lat 64 64 END TYPE COORD_SECTION 65 65 … … 73 73 INTEGER, DIMENSION(nb_point_max) :: direction ! vector direction of the point in the section 74 74 CHARACTER(len=40),DIMENSION(nb_class_max) :: classname ! characteristics of the class 75 REAL( wp), DIMENSION(nb_class_max) :: zsigi ! in-situ density classes (99 if you don't want)76 REAL( wp), DIMENSION(nb_class_max) :: zsigp ! potential density classes (99 if you don't want)77 REAL( wp), DIMENSION(nb_class_max) :: zsal ! salinity classes (99 if you don't want)78 REAL( wp), DIMENSION(nb_class_max) :: ztem ! temperature classes(99 if you don't want)79 REAL( wp), DIMENSION(nb_class_max) :: zlay ! level classes (99 if you don't want)80 REAL( wp), DIMENSION(nb_type_class,nb_class_max) :: transport ! transport output81 REAL( wp) :: slopeSection ! slope of the section75 REAL(dp), DIMENSION(nb_class_max) :: zsigi ! in-situ density classes (99 if you don't want) 76 REAL(dp), DIMENSION(nb_class_max) :: zsigp ! potential density classes (99 if you don't want) 77 REAL(dp), DIMENSION(nb_class_max) :: zsal ! salinity classes (99 if you don't want) 78 REAL(dp), DIMENSION(nb_class_max) :: ztem ! temperature classes(99 if you don't want) 79 REAL(dp), DIMENSION(nb_class_max) :: zlay ! level classes (99 if you don't want) 80 REAL(dp), DIMENSION(nb_type_class,nb_class_max) :: transport ! transport output 81 REAL(dp) :: slopeSection ! slope of the section 82 82 INTEGER :: nb_point ! number of points in the section 83 83 TYPE(POINT_SECTION),DIMENSION(nb_point_max) :: listPoint ! list of points in the sections … … 86 86 TYPE(SECTION),DIMENSION(nb_sec_max) :: secs ! Array of sections 87 87 88 REAL( wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: transports_3d89 REAL( wp), ALLOCATABLE, DIMENSION(:,:,:) :: transports_2d88 REAL(dp), ALLOCATABLE, DIMENSION(:,:,:,:) :: transports_3d 89 REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) :: transports_2d 90 90 91 91 … … 202 202 INTEGER , DIMENSION(1) :: ish ! work array for mpp_sum 203 203 INTEGER , DIMENSION(3) :: ish2 ! " 204 REAL( wp), ALLOCATABLE, DIMENSION(:) :: zwork ! "205 REAL( wp), ALLOCATABLE, DIMENSION(:,:,:):: zsum ! "204 REAL(dp), ALLOCATABLE, DIMENSION(:) :: zwork ! " 205 REAL(dp), ALLOCATABLE, DIMENSION(:,:,:):: zsum ! " 206 206 !!--------------------------------------------------------------------- 207 207 ! … … 587 587 ! 588 588 INTEGER :: jk, jseg, jclass,jl, isgnu, isgnv ! loop on level/segment/classes/ice categories 589 REAL( wp):: zumid, zvmid, zumid_ice, zvmid_ice ! U/V ocean & ice velocity on a cell segment590 REAL( wp):: zTnorm ! transport of velocity through one cell's sides591 REAL( wp):: ztn, zsn, zrhoi, zrhop, zsshn, zdep ! temperature/salinity/potential density/ssh/depth at u/v point589 REAL(dp):: zumid, zvmid, zumid_ice, zvmid_ice ! U/V ocean & ice velocity on a cell segment 590 REAL(dp):: zTnorm ! transport of velocity through one cell's sides 591 REAL(dp):: ztn, zsn, zrhoi, zrhop, zsshn, zdep ! temperature/salinity/potential density/ssh/depth at u/v point 592 592 TYPE(POINT_SECTION) :: k 593 593 !!-------------------------------------------------------- … … 680 680 zsn = interp(Kmm,k%I,k%J,jk,'V',ts(:,:,:,jp_sal,Kmm) ) 681 681 zrhop = interp(Kmm,k%I,k%J,jk,'V',rhop) 682 zrhoi = interp(Kmm,k%I,k%J,jk,'V', CASTDP(rhd*rho0+rho0))682 zrhoi = interp(Kmm,k%I,k%J,jk,'V',rhd*rho0+rho0) 683 683 zsshn = 0.5*( ssh(k%I,k%J,Kmm) + ssh(k%I,k%J+1,Kmm) ) * vmask(k%I,k%J,1) 684 684 CASE(2,3) … … 686 686 zsn = interp(Kmm,k%I,k%J,jk,'U',ts(:,:,:,jp_sal,Kmm) ) 687 687 zrhop = interp(Kmm,k%I,k%J,jk,'U',rhop) 688 zrhoi = interp(Kmm,k%I,k%J,jk,'U', CASTDP(rhd*rho0+rho0))688 zrhoi = interp(Kmm,k%I,k%J,jk,'U',rhd*rho0+rho0) 689 689 zsshn = 0.5*( ssh(k%I,k%J,Kmm) + ssh(k%I+1,k%J,Kmm) ) * umask(k%I,k%J,1) 690 690 END SELECT … … 794 794 TYPE(POINT_SECTION) :: k 795 795 INTEGER :: jk,jseg,jclass ! dummy variables for looping on level/segment/classes 796 REAL( wp) :: ztn, zsn, zrhoi, zrhop, zsshn, zdep ! temperature/salinity/ssh/potential density /depth at u/v point796 REAL(dp) :: ztn, zsn, zrhoi, zrhop, zsshn, zdep ! temperature/salinity/ssh/potential density /depth at u/v point 797 797 !!------------------------------------------------------------- 798 798 … … 853 853 zsn = interp(Kmm,k%I,k%J,jk,'V',ts(:,:,:,jp_sal,Kmm) ) 854 854 zrhop = interp(Kmm,k%I,k%J,jk,'V',rhop) 855 zrhoi = interp(Kmm,k%I,k%J,jk,'V', CASTDP(rhd*rho0+rho0))855 zrhoi = interp(Kmm,k%I,k%J,jk,'V',rhd*rho0+rho0) 856 856 857 857 CASE(2,3) … … 859 859 zsn = interp(Kmm,k%I,k%J,jk,'U',ts(:,:,:,jp_sal,Kmm) ) 860 860 zrhop = interp(Kmm,k%I,k%J,jk,'U',rhop) 861 zrhoi = interp(Kmm,k%I,k%J,jk,'U', CASTDP(rhd*rho0+rho0))861 zrhoi = interp(Kmm,k%I,k%J,jk,'U',rhd*rho0+rho0) 862 862 zsshn = 0.5*( ssh(k%I,k%J,Kmm) + ssh(k%I+1,k%J,Kmm) ) * umask(k%I,k%J,1) 863 863 END SELECT … … 987 987 INTEGER :: jclass ! Dummy loop 988 988 CHARACTER(len=2) :: classe ! Classname 989 REAL( wp) :: zbnd1,zbnd2 ! Class bounds990 REAL( wp) :: zslope ! section's slope coeff989 REAL(dp) :: zbnd1,zbnd2 ! Class bounds 990 REAL(dp) :: zslope ! section's slope coeff 991 991 ! 992 REAL( wp), DIMENSION(nb_type_class):: zsumclasses ! 1D workspace992 REAL(dp), DIMENSION(nb_type_class):: zsumclasses ! 1D workspace 993 993 !!------------------------------------------------------------- 994 994 … … 1171 1171 CHARACTER(len=1), INTENT(IN) :: cd_point ! type of point (U, V) 1172 1172 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(IN) :: ptab ! variable to compute at (ki, kj, kk ) 1173 REAL( wp) :: interp ! interpolated variable1173 REAL(dp) :: interp ! interpolated variable 1174 1174 1175 1175 !*local declations 1176 1176 INTEGER :: ii1, ij1, ii2, ij2 ! local integer 1177 REAL( wp):: ze3t, ze3, zwgt1, zwgt2, zbis, zdepu ! local real1178 REAL( wp):: zet1, zet2 ! weight for interpolation1179 REAL( wp):: zdep1,zdep2 ! differences of depth1180 REAL( wp):: zmsk ! mask value1177 REAL(dp):: ze3t, ze3, zwgt1, zwgt2, zbis, zdepu ! local real 1178 REAL(dp):: zet1, zet2 ! weight for interpolation 1179 REAL(dp):: zdep1,zdep2 ! differences of depth 1180 REAL(dp):: zmsk ! mask value 1181 1181 !!---------------------------------------------------------------------- 1182 1182 -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/diadetide.F90
r14644 r15540 22 22 LOGICAL, PUBLIC :: lk_diadetide 23 23 INTEGER :: ndiadetide 24 REAL( wp), SAVE, ALLOCATABLE, DIMENSION(:) :: tdiadetide24 REAL(dp), SAVE, ALLOCATABLE, DIMENSION(:) :: tdiadetide 25 25 26 26 PUBLIC :: dia_detide_init, dia_detide … … 92 92 93 93 INTEGER, INTENT(in) :: kt 94 REAL( wp), DIMENSION(jpi,jpj) :: zwght_2D95 REAL( wp) :: zwght, ztmp94 REAL(dp), DIMENSION(jpi,jpj) :: zwght_2D 95 REAL(dp) :: zwght, ztmp 96 96 INTEGER :: jn 97 97 -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/diahsb.F90
r14219 r15540 40 40 LOGICAL, PUBLIC :: ln_diahsb !: check the heat and salt budgets 41 41 42 REAL( wp) :: surf_tot ! ocean surface43 REAL( wp) :: frc_t, frc_s, frc_v ! global forcing trends44 REAL( wp) :: frc_wn_t, frc_wn_s ! global forcing trends42 REAL(dp) :: surf_tot ! ocean surface 43 REAL(dp) :: frc_t, frc_s, frc_v ! global forcing trends 44 REAL(dp) :: frc_wn_t, frc_wn_s ! global forcing trends 45 45 ! 46 46 REAL(dp), DIMENSION(:,:) , ALLOCATABLE :: surf 47 47 REAL(dp), DIMENSION(:,:) , ALLOCATABLE :: surf_ini 48 REAL( wp), DIMENSION(:,:) , ALLOCATABLE :: ssh_ini !49 REAL( wp), DIMENSION(:,:) , ALLOCATABLE :: ssh_hc_loc_ini, ssh_sc_loc_ini !48 REAL(dp), DIMENSION(:,:) , ALLOCATABLE :: ssh_ini ! 49 REAL(dp), DIMENSION(:,:) , ALLOCATABLE :: ssh_hc_loc_ini, ssh_sc_loc_ini ! 50 50 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: sc_loc_ini, e3t_ini ! 51 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: hc_loc_ini !52 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: tmask_ini51 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: hc_loc_ini ! 52 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: tmask_ini 53 53 54 54 !! * Substitutions … … 78 78 REAL(wp) :: zdiff_hc , zdiff_sc ! heat and salt content variations 79 79 REAL(wp) :: zdiff_hc1 , zdiff_sc1 ! - - - - 80 REAL( wp) :: zdiff_v1 ! volume variation80 REAL(dp) :: zdiff_v1 ! volume variation 81 81 REAL(dp) :: zdiff_v2 82 82 REAL(wp) :: zerr_hc1 , zerr_sc1 ! heat and salt content misfit -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/diahth.F90
r14219 r15540 31 31 32 32 ! note: following variables should move to local variables once iom_put is always used 33 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hth !: depth of the max vertical temperature gradient [m]34 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hd20 !: depth of 20 C isotherm [m]35 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hd26 !: depth of 26 C isotherm [m]36 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hd28 !: depth of 28 C isotherm [m]37 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: htc3 !: heat content of first 300 m [W]38 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: htc7 !: heat content of first 700 m [W]39 REAL( wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: htc20 !: heat content of first 2000 m [W]33 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hth !: depth of the max vertical temperature gradient [m] 34 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hd20 !: depth of 20 C isotherm [m] 35 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hd26 !: depth of 26 C isotherm [m] 36 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hd28 !: depth of 28 C isotherm [m] 37 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: htc3 !: heat content of first 300 m [W] 38 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: htc7 !: heat content of first 700 m [W] 39 REAL(dp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: htc20 !: heat content of first 2000 m [W] 40 40 41 41 … … 262 262 IF( iom_use ('hc300') ) THEN 263 263 zzdep = 300. 264 CALL dia_hth_htc( Kmm, zzdep, CASTWP(ts(:,:,:,jp_tem,Kmm)), htc3 )264 CALL dia_hth_htc( Kmm, zzdep, ts(:,:,:,jp_tem,Kmm), htc3 ) 265 265 CALL iom_put( 'hc300', rho0_rcp * htc3 ) ! vertically integrated heat content (J/m2) 266 266 ENDIF … … 271 271 IF( iom_use ('hc700') ) THEN 272 272 zzdep = 700. 273 CALL dia_hth_htc( Kmm, zzdep, CASTWP(ts(:,:,:,jp_tem,Kmm)), htc7 )273 CALL dia_hth_htc( Kmm, zzdep, ts(:,:,:,jp_tem,Kmm), htc7 ) 274 274 CALL iom_put( 'hc700', rho0_rcp * htc7 ) ! vertically integrated heat content (J/m2) 275 275 … … 281 281 IF( iom_use ('hc2000') ) THEN 282 282 zzdep = 2000. 283 CALL dia_hth_htc( Kmm, zzdep, CASTWP(ts(:,:,:,jp_tem,Kmm)), htc20 )283 CALL dia_hth_htc( Kmm, zzdep, ts(:,:,:,jp_tem,Kmm), htc20 ) 284 284 CALL iom_put( 'hc2000', rho0_rcp * htc20 ) ! vertically integrated heat content (J/m2) 285 285 ENDIF … … 296 296 INTEGER , INTENT(in) :: Kmm ! ocean time level index 297 297 REAL(wp), INTENT(in) :: ptem 298 REAL( wp), DIMENSION(jpi,jpj), INTENT(out) :: pdept298 REAL(dp), DIMENSION(jpi,jpj), INTENT(out) :: pdept 299 299 ! 300 300 INTEGER :: ji, jj, jk, iid 301 REAL( wp) :: zztmp, zzdep301 REAL(dp) :: zztmp, zzdep 302 302 INTEGER, DIMENSION(jpi,jpj) :: iktem 303 303 … … 337 337 INTEGER , INTENT(in) :: Kmm ! ocean time level index 338 338 REAL(wp), INTENT(in) :: pdep ! depth over the heat content 339 REAL( wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: pt340 REAL( wp), DIMENSION(jpi,jpj), INTENT(inout) :: phtc339 REAL(dp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: pt 340 REAL(dp), DIMENSION(jpi,jpj), INTENT(inout) :: phtc 341 341 ! 342 342 INTEGER :: ji, jj, jk, ik 343 REAL( wp), DIMENSION(jpi,jpj) :: zthick343 REAL(dp), DIMENSION(jpi,jpj) :: zthick 344 344 INTEGER , DIMENSION(jpi,jpj) :: ilevel 345 345 -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/diamlr.F90
r14644 r15540 409 409 !! 410 410 !!---------------------------------------------------------------------- 411 REAL( wp), DIMENSION(jpi,jpj) :: zadatrj2d411 REAL(dp), DIMENSION(jpi,jpj) :: zadatrj2d 412 412 !!---------------------------------------------------------------------- 413 413 -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/dianam.F90
r14219 r15540 63 63 REAL(dp) :: zsec1, zsec2 ! not used 64 64 REAL(dp) :: zjul ! temporary scalars 65 REAL( wp) :: zdrun ! temporary scalars65 REAL(dp) :: zdrun ! temporary scalars 66 66 !!---------------------------------------------------------------------- 67 67 -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/diaptr.F90
r14986 r15540 44 44 PUBLIC dia_ptr_hst ! called from tra_ldf/tra_adv routines 45 45 46 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hstr_adv, hstr_ldf, hstr_eiv !: Heat/Salt TRansports(adv, diff, Bolus.)47 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hstr_ove, hstr_btr, hstr_vtr !: heat Salt TRansports(overturn, baro, merional)48 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: pvtr_int, pzon_int !: Other zonal integrals46 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hstr_adv, hstr_ldf, hstr_eiv !: Heat/Salt TRansports(adv, diff, Bolus.) 47 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hstr_ove, hstr_btr, hstr_vtr !: heat Salt TRansports(overturn, baro, merional) 48 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: pvtr_int, pzon_int !: Other zonal integrals 49 49 50 50 LOGICAL, PUBLIC :: l_diaptr !: tracers trend flag … … 52 52 INTEGER, PARAMETER :: jp_vtr = 4 53 53 54 REAL( wp) :: rc_sv = 1.e-6_wp ! conversion from m3/s to Sverdrup55 REAL( wp) :: rc_pwatt = 1.e-15_wp ! conversion from W to PW (further x rho0 x Cp)56 REAL( wp) :: rc_ggram = 1.e-9_wp ! conversion from g to Gg (further x rho0)57 58 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: btmsk ! T-point basin interior masks59 REAL( wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: btmsk34 ! mask out Southern Ocean (=0 south of 34°S)54 REAL(dp) :: rc_sv = 1.e-6_wp ! conversion from m3/s to Sverdrup 55 REAL(dp) :: rc_pwatt = 1.e-15_wp ! conversion from W to PW (further x rho0 x Cp) 56 REAL(dp) :: rc_ggram = 1.e-9_wp ! conversion from g to Gg (further x rho0) 57 58 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: btmsk ! T-point basin interior masks 59 REAL(dp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: btmsk34 ! mask out Southern Ocean (=0 south of 34°S) 60 60 61 61 LOGICAL :: ll_init = .TRUE. !: tracers trend flag … … 63 63 !! * Substitutions 64 64 # include "do_loop_substitute.h90" 65 # include "single_precision_substitute.h90" 65 66 # include "domzgr_substitute.h90" 66 67 !!---------------------------------------------------------------------- … … 113 114 ! 114 115 INTEGER :: ji, jj, jk, jn ! dummy loop indices 115 REAL( wp), DIMENSION(jpi,jpj) :: z2d ! 2D workspace116 REAL( wp), DIMENSION(jpj) :: zvsum, ztsum, zssum ! 1D workspace116 REAL(dp), DIMENSION(jpi,jpj) :: z2d ! 2D workspace 117 REAL(dp), DIMENSION(jpj) :: zvsum, ztsum, zssum ! 1D workspace 117 118 ! 118 119 !overturning calculation 119 REAL( wp), DIMENSION(:,:,: ), ALLOCATABLE :: sjk, r1_sjk, v_msf ! i-mean i-k-surface and its inverse120 REAL( wp), DIMENSION(:,:,: ), ALLOCATABLE :: zt_jk, zs_jk ! i-mean T and S, j-Stream-Function121 122 REAL( wp), DIMENSION(:,:,:,:), ALLOCATABLE :: z4d1, z4d2123 REAL( wp), DIMENSION(:,:,: ), ALLOCATABLE :: z3dtr120 REAL(dp), DIMENSION(:,:,: ), ALLOCATABLE :: sjk, r1_sjk, v_msf ! i-mean i-k-surface and its inverse 121 REAL(dp), DIMENSION(:,:,: ), ALLOCATABLE :: zt_jk, zs_jk ! i-mean T and S, j-Stream-Function 122 123 REAL(dp), DIMENSION(:,:,:,:), ALLOCATABLE :: z4d1, z4d2 124 REAL(dp), DIMENSION(:,:,: ), ALLOCATABLE :: z3dtr 124 125 !!---------------------------------------------------------------------- 125 126 ! … … 349 350 INTEGER , INTENT(in) :: Kmm ! time level index 350 351 REAL(wp), DIMENSION(A2D(nn_hls),jpk), INTENT(in), OPTIONAL :: pvtr ! j-effective transport 351 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: zmask ! 3D workspace352 REAL( wp), DIMENSION(:,:,:,:), ALLOCATABLE :: zts ! 4D workspace353 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: sjk, v_msf ! Zonal sum: i-k surface area, j-effective transport354 REAL( wp), DIMENSION(:,:,:), ALLOCATABLE :: zt_jk, zs_jk ! Zonal sum: i-k surface area * (T, S)355 REAL( wp) :: zsfc, zvfc ! i-k surface area352 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: zmask ! 3D workspace 353 REAL(dp), DIMENSION(:,:,:,:), ALLOCATABLE :: zts ! 4D workspace 354 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: sjk, v_msf ! Zonal sum: i-k surface area, j-effective transport 355 REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: zt_jk, zs_jk ! Zonal sum: i-k surface area * (T, S) 356 REAL(dp) :: zsfc, zvfc ! i-k surface area 356 357 INTEGER :: ji, jj, jk, jn ! dummy loop indices 357 358 !!---------------------------------------------------------------------- … … 363 364 364 365 DO jn = 1, nbasin 365 v_msf(:,:,jn) = ptr_sjk( pvtr(:,:,:), btmsk34(:,:,jn) )366 v_msf(:,:,jn) =ptr_sjk( CASTDP(pvtr(:,:,:)), btmsk34(:,:,jn) ) 366 367 ENDDO 367 368 … … 538 539 INTEGER , INTENT(in ) :: ktra ! tracer index 539 540 CHARACTER(len=3) , INTENT(in) :: cptr ! transport type 'adv'/'ldf'/'eiv' 540 REAL( wp), DIMENSION(A2D(nn_hls),jpk) , INTENT(in) :: pvflx ! 3D input array of advection/diffusion541 REAL( wp), DIMENSION(A1Dj(nn_hls),nbasin) :: zsj !541 REAL(dp), DIMENSION(A2D(nn_hls),jpk) , INTENT(in) :: pvflx ! 3D input array of advection/diffusion 542 REAL(dp), DIMENSION(A1Dj(nn_hls),nbasin) :: zsj ! 542 543 INTEGER :: jn ! 543 544 … … 574 575 !! ** Action : phstr 575 576 !!---------------------------------------------------------------------- 576 REAL( wp), DIMENSION(jpj,nbasin) , INTENT(inout) :: phstr !577 REAL( wp), DIMENSION(A1Dj(nn_hls),nbasin), INTENT(in) :: pva !577 REAL(dp), DIMENSION(jpj,nbasin) , INTENT(inout) :: phstr ! 578 REAL(dp), DIMENSION(A1Dj(nn_hls),nbasin), INTENT(in) :: pva ! 578 579 INTEGER :: jj 579 580 #if ! defined key_mpi_off 580 581 INTEGER, DIMENSION(1) :: ish1d 581 582 INTEGER, DIMENSION(2) :: ish2d 582 REAL( wp), DIMENSION(jpj*nbasin) :: zwork583 REAL(dp), DIMENSION(jpj*nbasin) :: zwork 583 584 #endif 584 585 … … 610 611 !! ** Action : phstr 611 612 !!---------------------------------------------------------------------- 612 REAL( wp), DIMENSION(jpj,jpk,nbasin) , INTENT(inout) :: phstr !613 REAL( wp), DIMENSION(A1Dj(nn_hls),jpk,nbasin), INTENT(in) :: pva !613 REAL(dp), DIMENSION(jpj,jpk,nbasin) , INTENT(inout) :: phstr ! 614 REAL(dp), DIMENSION(A1Dj(nn_hls),jpk,nbasin), INTENT(in) :: pva ! 614 615 INTEGER :: jj, jk 615 616 #if ! defined key_mpi_off 616 617 INTEGER, DIMENSION(1) :: ish1d 617 618 INTEGER, DIMENSION(3) :: ish3d 618 REAL( wp), DIMENSION(jpj*jpk*nbasin) :: zwork619 REAL(dp), DIMENSION(jpj*jpk*nbasin) :: zwork 619 620 #endif 620 621 … … 675 676 !! ** Action : - p_fval: i-k-mean poleward flux of pvflx 676 677 !!---------------------------------------------------------------------- 677 REAL( wp), INTENT(in), DIMENSION(A2D(nn_hls),jpk) :: pvflx ! mask flux array at V-point678 REAL( wp), INTENT(in), DIMENSION(jpi,jpj) :: pmsk ! Optional 2D basin mask678 REAL(dp), INTENT(in), DIMENSION(A2D(nn_hls),jpk) :: pvflx ! mask flux array at V-point 679 REAL(dp), INTENT(in), DIMENSION(jpi,jpj) :: pmsk ! Optional 2D basin mask 679 680 ! 680 681 INTEGER :: ji, jj, jk ! dummy loop arguments 681 REAL( wp), DIMENSION(A1Dj(nn_hls)) :: p_fval ! function value682 REAL(dp), DIMENSION(A1Dj(nn_hls)) :: p_fval ! function value 682 683 !!-------------------------------------------------------------------- 683 684 ! … … 704 705 ! 705 706 INTEGER :: ji,jj ! dummy loop arguments 706 REAL( wp), DIMENSION(A1Dj(nn_hls)) :: p_fval ! function value707 REAL(dp), DIMENSION(A1Dj(nn_hls)) :: p_fval ! function value 707 708 !!-------------------------------------------------------------------- 708 709 ! … … 723 724 !! ** Action : - p_fval: j-cumulated sum of pva 724 725 !!---------------------------------------------------------------------- 725 REAL( wp) , INTENT(in), DIMENSION(jpi,jpj) :: pva ! mask flux array at V-point726 REAL(dp) , INTENT(in), DIMENSION(jpi,jpj) :: pva ! mask flux array at V-point 726 727 ! 727 728 INTEGER :: ji,jj,jc ! dummy loop arguments 728 729 INTEGER :: ijpj ! ??? 729 REAL( wp), DIMENSION(jpi,jpj) :: p_fval ! function value730 REAL(dp), DIMENSION(jpi,jpj) :: p_fval ! function value 730 731 !!-------------------------------------------------------------------- 731 732 ! … … 754 755 !! 755 756 IMPLICIT none 756 REAL( wp) , INTENT(in), DIMENSION(A2D(nn_hls),jpk) :: pta ! mask flux array at V-point757 REAL( wp) , INTENT(in), DIMENSION(jpi,jpj) :: pmsk ! Optional 2D basin mask757 REAL(dp) , INTENT(in), DIMENSION(A2D(nn_hls),jpk) :: pta ! mask flux array at V-point 758 REAL(dp) , INTENT(in), DIMENSION(jpi,jpj) :: pmsk ! Optional 2D basin mask 758 759 !! 759 760 INTEGER :: ji, jj, jk ! dummy loop arguments 760 REAL( wp), DIMENSION(A1Dj(nn_hls),jpk) :: p_fval ! return function value761 REAL(dp), DIMENSION(A1Dj(nn_hls),jpk) :: p_fval ! return function value 761 762 !!-------------------------------------------------------------------- 762 763 ! -
NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DIA/diawri.F90
r14986 r15540 123 123 REAL(wp):: zztmp2, zztmpy ! - - 124 124 REAL(wp):: ze3 125 REAL( wp), DIMENSION(jpi,jpj) :: z2d ! 2D workspace125 REAL(dp), DIMENSION(jpi,jpj) :: z2d ! 2D workspace 126 126 REAL(wp), DIMENSION(jpi,jpj,jpk) :: z3d ! 3D workspace 127 127 !!---------------------------------------------------------------------- … … 1092 1092 !! 1093 1093 INTEGER :: inum, jk 1094 REAL( wp), DIMENSION(jpi,jpj,jpk) :: ze3t, zgdept ! 3D workspace for qco substitution1094 REAL(dp), DIMENSION(jpi,jpj,jpk) :: ze3t, zgdept ! 3D workspace for qco substitution 1095 1095 !!---------------------------------------------------------------------- 1096 1096 !
Note: See TracChangeset
for help on using the changeset viewer.