- Timestamp:
- 2020-09-14T17:40:34+02:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r11351_fldread_with_XIOS
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11351_fldread_with_XIOS
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEADext/AGRIF5 ^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 9 # SETTE 10 ^/utils/CI/sette@13382 sette
-
- Property svn:externals
-
NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/TOP/C14/trcatm_c14.F90
r10069 r13463 21 21 PUBLIC trc_atm_c14_ini ! called in trcini_c14.F90 22 22 ! 23 !! * Substitutions 24 # include "do_loop_substitute.h90" 23 25 !!---------------------------------------------------------------------- 24 26 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 118 120 IF( ierr3 /= 0 ) CALL ctl_stop( 'STOP', 'trc_atm_c14_ini: unable to allocate fareaz' ) 119 121 ! 120 DO jj = 1 , jpj ! from C14b package 121 DO ji = 1 , jpi 122 IF( gphit(ji,jj) >= yn40 ) THEN 123 fareaz(ji,jj,1) = 0. 124 fareaz(ji,jj,2) = 0. 125 fareaz(ji,jj,3) = 1. 126 ELSE IF( gphit(ji,jj ) <= ys40) THEN 127 fareaz(ji,jj,1) = 1. 128 fareaz(ji,jj,2) = 0. 129 fareaz(ji,jj,3) = 0. 130 ELSE IF( gphit(ji,jj) >= yn20 ) THEN 131 fareaz(ji,jj,1) = 0. 132 fareaz(ji,jj,2) = 2. * ( 1. - gphit(ji,jj) / yn40 ) 133 fareaz(ji,jj,3) = 2. * gphit(ji,jj) / yn40 - 1. 134 ELSE IF( gphit(ji,jj) <= ys20 ) THEN 135 fareaz(ji,jj,1) = 2. * gphit(ji,jj) / ys40 - 1. 136 fareaz(ji,jj,2) = 2. * ( 1. - gphit(ji,jj) / ys40 ) 137 fareaz(ji,jj,3) = 0. 138 ELSE 139 fareaz(ji,jj,1) = 0. 140 fareaz(ji,jj,2) = 1. 141 fareaz(ji,jj,3) = 0. 142 ENDIF 143 END DO 144 END DO 122 DO_2D( 1, 1, 1, 1 ) 123 IF( gphit(ji,jj) >= yn40 ) THEN 124 fareaz(ji,jj,1) = 0. 125 fareaz(ji,jj,2) = 0. 126 fareaz(ji,jj,3) = 1. 127 ELSE IF( gphit(ji,jj ) <= ys40) THEN 128 fareaz(ji,jj,1) = 1. 129 fareaz(ji,jj,2) = 0. 130 fareaz(ji,jj,3) = 0. 131 ELSE IF( gphit(ji,jj) >= yn20 ) THEN 132 fareaz(ji,jj,1) = 0. 133 fareaz(ji,jj,2) = 2. * ( 1. - gphit(ji,jj) / yn40 ) 134 fareaz(ji,jj,3) = 2. * gphit(ji,jj) / yn40 - 1. 135 ELSE IF( gphit(ji,jj) <= ys20 ) THEN 136 fareaz(ji,jj,1) = 2. * gphit(ji,jj) / ys40 - 1. 137 fareaz(ji,jj,2) = 2. * ( 1. - gphit(ji,jj) / ys40 ) 138 fareaz(ji,jj,3) = 0. 139 ELSE 140 fareaz(ji,jj,1) = 0. 141 fareaz(ji,jj,2) = 1. 142 fareaz(ji,jj,3) = 0. 143 ENDIF 144 END_2D 145 145 ! 146 146 ENDIF … … 223 223 IF(kc14typ >= 1) THEN ! Transient C14 & CO2 224 224 ! 225 tyrc14_now = tyrc14_now + ( r dt / ( rday * nyear_len(1)) ) ! current time step in yr relative to tyrc14_beg225 tyrc14_now = tyrc14_now + ( rn_Dt / ( rday * nyear_len(1)) ) ! current time step in yr relative to tyrc14_beg 226 226 ! 227 227 ! CO2 -------------------------------------------------------- -
NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/TOP/C14/trcini_c14.F90
r10069 r13463 31 31 CONTAINS 32 32 33 SUBROUTINE trc_ini_c14 33 SUBROUTINE trc_ini_c14( Kmm ) 34 34 !!---------------------------------------------------------------------- 35 35 !! *** trc_ini_c14 *** … … 40 40 !!---------------------------------------------------------------------- 41 41 ! 42 INTEGER, INTENT(in) :: Kmm ! time level indices 42 43 REAL(wp) :: ztrai 43 44 INTEGER :: jn … … 57 58 IF(lwp) WRITE(numout,*) ' ==> Ocean C14/C :', rc14init 58 59 ! 59 tr n(:,:,:,jp_c14) = rc14init * tmask(:,:,:)60 tr(:,:,:,jp_c14,Kmm) = rc14init * tmask(:,:,:) 60 61 ! 61 62 qtr_c14(:,:) = 0._wp ! Init of air-sea BC … … 68 69 ! 69 70 CALL iom_get( numrtr, 'co2sbc', co2sbc ) 70 CALL iom_get( numrtr, jpdom_auto glo, 'c14sbc', c14sbc )71 CALL iom_get( numrtr, jpdom_auto glo, 'exch_co2', exch_co2 )72 CALL iom_get( numrtr, jpdom_auto glo, 'exch_c14', exch_c14 )73 CALL iom_get( numrtr, jpdom_auto glo, 'qtr_c14', qtr_c14 )71 CALL iom_get( numrtr, jpdom_auto, 'c14sbc', c14sbc ) 72 CALL iom_get( numrtr, jpdom_auto, 'exch_co2', exch_co2 ) 73 CALL iom_get( numrtr, jpdom_auto, 'exch_c14', exch_c14 ) 74 CALL iom_get( numrtr, jpdom_auto, 'qtr_c14', qtr_c14 ) 74 75 ! 75 76 END IF … … 84 85 ELSE 85 86 ! 86 CALL iom_get( numrtr, jpdom_auto glo, 'qint_c14', qint_c14 )87 CALL iom_get( numrtr, jpdom_auto, 'qint_c14', qint_c14 ) 87 88 ! 88 89 ENDIF -
NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/TOP/C14/trcnam_c14.F90
r10069 r13463 61 61 ln_trc_obc(jp_c14) = .false. 62 62 ! 63 REWIND( numtrc_ref ) ! Namelist namc14_typ in reference namelist :64 63 READ ( numtrc_ref, namc14_typ, IOSTAT = ios, ERR = 901) 65 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namc14_typ in reference namelist', lwp ) 66 REWIND( numtrc_cfg ) ! Namelist namcfcdate in configuration namelist 64 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namc14_typ in reference namelist' ) 67 65 READ ( numtrc_cfg, namc14_typ, IOSTAT = ios, ERR = 902) 68 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namc14_typ in configuration namelist' , lwp)66 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namc14_typ in configuration namelist' ) 69 67 IF(lwm) WRITE ( numonr, namc14_typ ) 70 68 ! … … 78 76 ENDIF 79 77 80 REWIND( numtrc_ref ) ! Namelist namc14_typ in reference namelist :81 78 READ ( numtrc_ref, namc14_sbc, IOSTAT = ios, ERR = 903) 82 903 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namc14_sbc in reference namelist', lwp ) 83 REWIND( numtrc_cfg ) ! Namelist namcfcdate in configuration namelist 79 903 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namc14_sbc in reference namelist' ) 84 80 READ ( numtrc_cfg, namc14_sbc, IOSTAT = ios, ERR = 904) 85 904 IF( ios > 0 ) CALL ctl_nam ( ios , 'namc14_sbc in configuration namelist' , lwp)81 904 IF( ios > 0 ) CALL ctl_nam ( ios , 'namc14_sbc in configuration namelist' ) 86 82 IF(lwm) WRITE( numonr, namc14_sbc ) 87 83 ! … … 94 90 ENDIF 95 91 96 REWIND( numtrc_ref ) ! Namelist namc14_typ in reference namelist :97 92 READ ( numtrc_ref, namc14_fcg, IOSTAT = ios, ERR = 905) 98 905 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namc14_fcg in reference namelist', lwp ) 99 REWIND( numtrc_cfg ) ! Namelist namcfcdate in configuration namelist 93 905 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namc14_fcg in reference namelist' ) 100 94 READ ( numtrc_cfg, namc14_fcg, IOSTAT = ios, ERR = 906) 101 906 IF( ios > 0 ) CALL ctl_nam ( ios , 'namc14_fcg in configuration namelist' , lwp)95 906 IF( ios > 0 ) CALL ctl_nam ( ios , 'namc14_fcg in configuration namelist' ) 102 96 IF(lwm) WRITE ( numonr, namc14_fcg ) 103 97 ! -
NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/TOP/C14/trcsms_c14.F90
r10069 r13463 26 26 PUBLIC trc_sms_c14 ! called in trcsms.F90 27 27 28 !! * Substitutions 29 # include "do_loop_substitute.h90" 30 # include "domzgr_substitute.h90" 28 31 !!---------------------------------------------------------------------- 29 32 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 33 36 CONTAINS 34 37 35 SUBROUTINE trc_sms_c14( kt )38 SUBROUTINE trc_sms_c14( kt, Kbb, Kmm, Krhs ) 36 39 !!---------------------------------------------------------------------- 37 40 !! *** ROUTINE trc_sms_c14 *** … … 46 49 ! freshwater fluxes which should not impact the C14/C ratio 47 50 ! 48 ! => Delta-C14= ( tr n(...jp_c14) -1)*1000.51 ! => Delta-C14= ( tr(...jp_c14,Kmm) -1)*1000. 49 52 !! 50 53 !!---------------------------------------------------------------------- 51 54 ! 52 INTEGER, INTENT(in) :: kt ! ocean time-step index 55 INTEGER, INTENT(in) :: kt ! ocean time-step index 56 INTEGER, INTENT(in) :: Kbb, Kmm, Krhs ! ocean time level 53 57 ! 54 INTEGER :: ji, jj, jk 58 INTEGER :: ji, jj, jk ! dummy loop indices 55 59 REAL(wp) :: zt, ztp, zsk ! dummy variables 56 60 REAL(wp) :: zsol ! solubility … … 77 81 ! ------------------------------------------------------------------- 78 82 79 DO jj = 1, jpj 80 DO ji = 1, jpi 81 IF( tmask(ji,jj,1) > 0. ) THEN 82 ! 83 zt = MIN( 40. , tsn(ji,jj,1,jp_tem) ) 84 ! 85 ! Computation of solubility zsol in [mol/(L * atm)] 86 ! after Wanninkhof (2014) referencing Weiss (1974) 87 ztp = ( zt + 273.16 ) * 0.01 88 zsk = 0.027766 + ztp * ( -0.025888 + 0.0050578 * ztp ) ! [mol/(L * atm)] 89 zsol = EXP( -58.0931 + 90.5069 / ztp + 22.2940 * LOG( ztp ) + zsk * tsn(ji,jj,1,jp_sal) ) 90 ! convert solubilities [mol/(L * atm)] -> [mol/(m^3 * ppm)] 91 zsol = zsol * 1.e-03 83 DO_2D( 1, 1, 1, 1 ) 84 IF( tmask(ji,jj,1) > 0. ) THEN 85 ! 86 zt = MIN( 40. , ts(ji,jj,1,jp_tem,Kmm) ) 87 ! 88 ! Computation of solubility zsol in [mol/(L * atm)] 89 ! after Wanninkhof (2014) referencing Weiss (1974) 90 ztp = ( zt + 273.16 ) * 0.01 91 zsk = 0.027766 + ztp * ( -0.025888 + 0.0050578 * ztp ) ! [mol/(L * atm)] 92 zsol = EXP( -58.0931 + 90.5069 / ztp + 22.2940 * LOG( ztp ) + zsk * ts(ji,jj,1,jp_sal,Kmm) ) 93 ! convert solubilities [mol/(L * atm)] -> [mol/(m^3 * ppm)] 94 zsol = zsol * 1.e-03 92 95 93 94 95 96 ! Computes the Schmidt number of CO2 in seawater 97 ! Wanninkhof-2014 98 zsch = 2116.8 + zt * ( -136.25 + zt * (4.7353 + zt * (-0.092307 + 0.0007555 * zt ) ) ) 96 99 97 98 99 100 101 102 103 100 ! Wanninkhof Piston velocity: zpv in units [m/s] 101 zv2 = xkwind * (wndm(ji,jj) * wndm(ji,jj)) ! wind speed module at T points 102 ! chemical enhancement (Wanninkhof & Knox, 1996) 103 IF( ln_chemh ) zv2 = zv2 + 2.5 * ( 0.5246 + zt * (0.016256 + 0.00049946 * zt ) ) 104 zv2 = zv2/360000._wp ! conversion cm/h -> m/s 105 ! 106 zpv = ( zv2 * SQRT( 660./ zsch ) ) * ( 1. - fr_i(ji,jj) ) * tmask(ji,jj,1) 104 107 105 ! CO2 piston velocity (m/s) 106 exch_co2(ji,jj)= zpv 107 ! CO2 invasion rate (mol/ppm/m2/s) = 1st part of 14C/C exchange velocity 108 exch_c14(ji,jj)= zpv * zsol 109 ELSE 110 exch_co2(ji,jj) = 0._wp 111 exch_c14(ji,jj) = 0._wp 112 ENDIF 113 END DO 114 END DO 108 ! CO2 piston velocity (m/s) 109 exch_co2(ji,jj)= zpv 110 ! CO2 invasion rate (mol/ppm/m2/s) = 1st part of 14C/C exchange velocity 111 exch_c14(ji,jj)= zpv * zsol 112 ELSE 113 exch_co2(ji,jj) = 0._wp 114 exch_c14(ji,jj) = 0._wp 115 ENDIF 116 END_2D 115 117 116 118 ! Exchange velocity for 14C/C ratio (m/s) … … 120 122 ! Flux of C-14 from air-to-sea; units: (C14/C ratio) x m/s 121 123 ! already masked 122 qtr_c14(:,:) = exch_c14(:,:) * ( c14sbc(:,:) - tr b(:,:,1,jp_c14) )124 qtr_c14(:,:) = exch_c14(:,:) * ( c14sbc(:,:) - tr(:,:,1,jp_c14,Kbb) ) 123 125 124 126 ! cumulation of air-to-sea flux at each time step 125 qint_c14(:,:) = qint_c14(:,:) + qtr_c14(:,:) * r dttrc127 qint_c14(:,:) = qint_c14(:,:) + qtr_c14(:,:) * rn_Dt 126 128 ! 127 129 ! Add the surface flux to the trend of jp_c14 128 DO jj = 1, jpj 129 DO ji = 1, jpi 130 tra(ji,jj,1,jp_c14) = tra(ji,jj,1,jp_c14) + qtr_c14(ji,jj) / e3t_n(ji,jj,1) 131 END DO 132 END DO 130 DO_2D( 1, 1, 1, 1 ) 131 tr(ji,jj,1,jp_c14,Krhs) = tr(ji,jj,1,jp_c14,Krhs) + qtr_c14(ji,jj) / e3t(ji,jj,1,Kmm) 132 END_2D 133 133 ! 134 134 ! Computation of decay effects on jp_c14 135 DO jk = 1, jpk 136 DO jj = 1, jpj 137 DO ji = 1, jpi 138 ! 139 tra(ji,jj,jk,jp_c14) = tra(ji,jj,jk,jp_c14) - rlam14 * trb(ji,jj,jk,jp_c14) * tmask(ji,jj,jk) 140 ! 141 END DO 142 END DO 143 END DO 135 DO_3D( 1, 1, 1, 1, 1, jpk ) 136 ! 137 tr(ji,jj,jk,jp_c14,Krhs) = tr(ji,jj,jk,jp_c14,Krhs) - rlam14 * tr(ji,jj,jk,jp_c14,Kbb) * tmask(ji,jj,jk) 138 ! 139 END_3D 144 140 ! 145 141 IF( lrst_trc ) THEN … … 157 153 ENDIF 158 154 159 IF( l_trdtrc ) CALL trd_trc( tr a(:,:,:,jp_c14), 1, jptra_sms, kt) ! save trends155 IF( l_trdtrc ) CALL trd_trc( tr(:,:,:,jp_c14,Krhs), 1, jptra_sms, kt, Kmm ) ! save trends 160 156 ! 161 157 IF( ln_timing ) CALL timing_stop('trc_sms_c14') -
NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/TOP/C14/trcwri_c14.F90
r10425 r13463 23 23 ! Standard ratio: 1.176E-12 ; Avogadro's nbr = 6.022E+23 at/mol ; bomb C14 traditionally reported as 1.E+26 atoms 24 24 REAL(wp), PARAMETER :: atomc14 = 1.176 * 6.022E-15 ! conversion factor 25 !! * Substitutions 26 # include "do_loop_substitute.h90" 25 27 26 28 27 29 CONTAINS 28 30 29 SUBROUTINE trc_wri_c14 31 SUBROUTINE trc_wri_c14( Kmm ) 30 32 !!--------------------------------------------------------------------- 31 33 !! *** ROUTINE trc_wri_c14 *** … … 33 35 !! ** Purpose : output additional C14 tracers fields 34 36 !!--------------------------------------------------------------------- 37 INTEGER, INTENT(in) :: Kmm ! time level indices 35 38 CHARACTER (len=20) :: cltra ! short title for tracer 36 39 INTEGER :: ji,jj,jk,jn ! dummy loop indexes … … 43 46 ! --------------------------------------- 44 47 cltra = TRIM( ctrcnm(jp_c14) ) ! short title for tracer 45 CALL iom_put( cltra, tr n(:,:,:,jp_c14) )48 CALL iom_put( cltra, tr(:,:,:,jp_c14,Kmm) ) 46 49 47 50 ! compute and write the tracer diagnostic in the file … … 57 60 zz3d(:,:,:) = 0._wp 58 61 ! 59 DO jk = 1, jpkm1 60 DO jj = 1, jpj 61 DO ji = 1, jpi 62 IF( tmask(ji,jj,jk) > 0._wp) THEN 63 z3d (ji,jj,jk) = trn(ji,jj,jk,jp_c14) 64 zz3d(ji,jj,jk) = LOG( z3d(ji,jj,jk) ) 65 ENDIF 66 ENDDO 67 ENDDO 68 ENDDO 62 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 63 IF( tmask(ji,jj,jk) > 0._wp) THEN 64 z3d (ji,jj,jk) = tr(ji,jj,jk,jp_c14,Kmm) 65 zz3d(ji,jj,jk) = LOG( z3d(ji,jj,jk) ) 66 ENDIF 67 END_3D 69 68 zres(:,:) = z3d(:,:,1) 70 69 … … 72 71 z2d(:,:) =0._wp 73 72 jk = 1 74 DO jj = 1, jpj 75 DO ji = 1, jpi 76 ztemp = zres(ji,jj) / c14sbc(ji,jj) 77 IF( ztemp > 0._wp .AND. tmask(ji,jj,jk) > 0._wp ) z2d(ji,jj) = LOG( ztemp ) 78 ENDDO 79 ENDDO 73 DO_2D( 1, 1, 1, 1 ) 74 ztemp = zres(ji,jj) / c14sbc(ji,jj) 75 IF( ztemp > 0._wp .AND. tmask(ji,jj,jk) > 0._wp ) z2d(ji,jj) = LOG( ztemp ) 76 END_2D 80 77 ! 81 78 z3d(:,:,:) = 1.d03 * ( z3d(:,:,:) - 1._wp ) … … 113 110 ENDIF 114 111 IF( iom_use("C14Inv") ) THEN 115 ztemp = glob_sum( 'trcwri_c14', tr n(:,:,:,jp_c14) * cvol(:,:,:) )112 ztemp = glob_sum( 'trcwri_c14', tr(:,:,:,jp_c14,Kmm) * cvol(:,:,:) ) 116 113 ztemp = atomc14 * xdicsur * ztemp 117 114 CALL iom_put( "C14Inv", ztemp ) ! Radiocarbon ocean inventory [10^26 atoms] … … 130 127 #endif 131 128 129 !! * Substitutions 130 # include "do_loop_substitute.h90" 132 131 !!---------------------------------------------------------------------- 133 132 !! NEMO/TOP 4.0 , NEMO Consortium (2018)
Note: See TracChangeset
for help on using the changeset viewer.