Changeset 6647 for TOOLS/WATER_BUDGET/ATM_waterbudget.py
- Timestamp:
- 10/10/23 12:58:04 (7 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TOOLS/WATER_BUDGET/ATM_waterbudget.py
r6620 r6647 34 34 raise Exception ( "Minimum Python version is 3.8" ) 35 35 36 ## Import local module 36 ## Import local modules 37 37 import WaterUtils as wu 38 38 import libIGCM_sys 39 39 import nemo, lmdz 40 41 from WaterUtils import VarInt, Rho, Ra, Grav, ICE_rho_ice, ICE_rho_sno, OCE_rho_liq, ATM_rho, SRF_rho, RUN_rho, ICE_rho_pnd, YearLength 40 42 41 43 ## Creates parser for reading .ini input file … … 47 49 ## --------------------- 48 50 ATM=None ; ATM_HIS='latlon' ; SRF_HIS='latlon' ; RUN_HIS='latlon' ; ORCA=None ; NEMO=None ; OCE_relax=False 49 OCE_icb=False ; Coupled=False ; Routing=None 51 OCE_icb=False ; Coupled=False ; Routing=None ; TestInterp=None 50 52 TarRestartPeriod_beg=None ; TarRestartPeriod_end=None ; Comment=None ; Period=None ; Title=None 53 YearBegin=None ; YearEnd=None ; DateBegin=None ; DateEnd=None 51 54 52 55 ## … … 66 69 tar_restart_end_RUN=None ; tar_restart_end_OCE=None ; tar_restart_end_ICE=None 67 70 ContinueOnError=False ; ErrorCount=0 ; SortIco = False 71 72 ## 73 ## Precision of history file reading 74 ## --------------------------------- 75 # Default is float (full precision). Degrade the precision by using np.float32 76 # Restart file are always read at the full precision 77 readPrec=float 68 78 69 79 ## Read command line arguments … … 138 148 print ( f'\nConfig file readed : {IniFile} ' ) 139 149 150 ## 151 ## Reading prec 152 if wu.unDefined ( 'readPrec' ) : 153 readPrec = np.float64 154 else : 155 if readPrec in ["float", "float64", "r8", "double", "<class 'float'>" ] : readPrec = float 156 if readPrec in [ "float32", "r4", "single", "<class 'numpy.float32'>" ] : readPrec = np.float32 157 if readPrec in [ "float16", "r2", "half" , "<class 'numpy.float16'>" ] : readPrec = np.float16 158 140 159 ## Some physical constants 141 160 ## ======================= … … 155 174 if not 'Files' in config.keys () : config['Files'] = {} 156 175 157 config['Physics'] = { 'Ra': Ra, 'Grav':Grav, 'ICE_rho_ice':ICE_rho_ice, 'ICE_rho_sno':ICE_rho_sno,158 'OCE_rho_liq': OCE_rho_liq, 'ATM_rho':ATM_rho, 'SRF_rho':SRF_rho, 'RUN_rho':RUN_rho}159 160 config['Config'] = { 'ContinueOnError': ContinueOnError, 'SortIco':SortIco}176 config['Physics'] = { 'Ra':str(Ra), 'Grav':str(Grav), 'ICE_rho_ice':str(ICE_rho_ice), 'ICE_rho_sno':str(ICE_rho_sno), 177 'OCE_rho_liq':str(OCE_rho_liq), 'ATM_rho':str(ATM_rho), 'SRF_rho':str(SRF_rho), 'RUN_rho':str(RUN_rho)} 178 179 config['Config'] = { 'ContinueOnError':str(ContinueOnError), 'SortIco':str(SortIco), 'TestInterp':str(TestInterp), 'readPrec':str(readPrec) } 161 180 162 181 ## -------------------------- … … 176 195 if wu.unDefined ( 'DateBegin' ) : 177 196 DateBegin = f'{YearBegin}0101' 178 config['Experiment']['DateBegin'] = DateBegin197 config['Experiment']['DateBegin'] = str(DateBegin) 179 198 else : 180 YearBegin, MonthBegin, DayBegin = wu. DateSplit( DateBegin )181 DateBegin = wu.FormatToGregorian ( 182 config['Experiment']['YearBegin'] = YearBegin199 YearBegin, MonthBegin, DayBegin = wu.SplitDate ( DateBegin ) 200 DateBegin = wu.FormatToGregorian (DateBegin) 201 config['Experiment']['YearBegin'] = str(YearBegin) 183 202 184 203 if wu.unDefined ( 'DateEnd' ) : 185 204 DateEnd = f'{YearEnd}1231' 186 config['Experiment']['DateEnd'] = DateEnd205 config['Experiment']['DateEnd'] = str(DateEnd) 187 206 else : 188 YearEnd, MonthEnd, DayEnd = wu.DateSplit ( DateEnd ) 189 DateEnd = wu.FormatToGregorian ( DateEnd) 207 YearEnd, MonthEnd, DayEnd = wu.SplitDate ( DateEnd ) 208 DateEnd = wu.FormatToGregorian (DateEnd) 209 config['Experiment']['DateEnd'] = str(DateEnd) 190 210 191 211 if wu.unDefined ( 'PackFrequency' ) : … … 200 220 ## Output file with water budget diagnostics 201 221 ## ----------------------------------------- 202 if wu.unDefined ( 'FileOut' ) : FileOut = f'ATM_waterbudget_{JobName}_{DateBegin}_{DateEnd}.out' 222 if wu.unDefined ( 'FileOut' ) : 223 FileOut = f'ATM_waterbudget_{JobName}_{YearBegin}_{YearEnd}' 224 if ICO : 225 if ATM_HIS == 'latlon' : FileOut = f'{FileOut}_LATLON' 226 if ATM_HIS == 'ico' : FileOut = f'{FileOut}_ICO' 227 if readPrec == np.float32 : FileOut = f'{FileOut}_float32' 228 FileOut = f'{FileOut}.out' 229 203 230 config['Files']['FileOut'] = FileOut 204 231 … … 207 234 ## Useful functions 208 235 ## ---------------- 236 if readPrec == float : 237 def rprec (tab) : return tab 238 else : 239 def rprec (tab) : return tab.astype(readPrec).astype(float) 240 209 241 def kg2Sv (val, rho=ATM_rho) : 210 242 '''From kg to Sverdrup''' … … 216 248 217 249 def var2prt (var, small=False, rho=ATM_rho) : 218 if small : return var , kg2Sv(var, rho=rho)*1000., kg2myear(var, rho=rho)*100 #250 if small : return var , kg2Sv(var, rho=rho)*1000., kg2myear(var, rho=rho)*1000 219 251 else : return var , kg2Sv(var, rho=rho) , kg2myear(var, rho=rho) 220 252 … … 236 268 f_out.flush () 237 269 return None 238 270 271 echo ( f'{ContinueOnError = }' ) 272 echo ( f'{SortIco = }' ) 273 echo ( f'{readPrec = }' ) 274 275 echo ( f'{JobName = }' ) 276 echo ( f'{ConfigCard = }' ) 277 echo ( f'{libIGCM = }' ) 278 echo ( f'{User = }' ) 279 echo ( f'{Group = }' ) 280 echo ( f'{Freq = }' ) 281 echo ( f'{YearBegin = }' ) 282 echo ( f'{YearEnd = }' ) 283 echo ( f'{DateBegin = }' ) 284 echo ( f'{DateEnd = }' ) 285 echo ( f'{PackFrequency = }' ) 286 echo ( f'{ATM = }' ) 287 echo ( f'{Routing = }' ) 288 echo ( f'{ORCA = }' ) 289 echo ( f'{NEMO = }' ) 290 echo ( f'{Coupled = }' ) 291 echo ( f'{ATM_HIS = }' ) 292 echo ( f'{SRF_HIS = }' ) 293 echo ( f'{RUN_HIS = }' ) 294 239 295 ## Set libIGCM directories 240 296 ## ----------------------- … … 266 322 267 323 echo (' ') 268 echo ( f'JobName : {JobName}')269 echo ( f'Comment : {Comment}')270 echo ( f'TmpDir : {TmpDir}')324 echo ( f'JobName : {JobName}' ) 325 echo ( f'Comment : {Comment}' ) 326 echo ( f'TmpDir : {TmpDir}' ) 271 327 echo ( f'FileDir : {FileDir}' ) 272 328 echo ( f'FileDirOCE : {FileDirOCE}' ) … … 598 654 # ATM grid with cell surfaces 599 655 if LMDZ : 600 ATM_lat = lmdz.geo2point ( d_ATM_his ['lat']+0*d_ATM_his ['lon'], dim1D='cell_latlon' ) 601 ATM_lon = lmdz.geo2point ( 0*d_ATM_his ['lat']+ d_ATM_his ['lon'], dim1D='cell_latlon' ) 602 ATM_aire = lmdz.geo2point ( d_ATM_his ['aire'] [0], cumulPoles=True, dim1D='cell_latlon' ) 603 ATM_fter = lmdz.geo2point ( d_ATM_his ['fract_ter'][0], dim1D='cell_latlon' ) 604 ATM_foce = lmdz.geo2point ( d_ATM_his ['fract_oce'][0], dim1D='cell_latlon' ) 605 ATM_fsic = lmdz.geo2point ( d_ATM_his ['fract_sic'][0], dim1D='cell_latlon' ) 606 ATM_flic = lmdz.geo2point ( d_ATM_his ['fract_lic'][0], dim1D='cell_latlon' ) 607 SRF_lat = lmdz.geo2point ( d_SRF_his ['lat']+0*d_SRF_his ['lon'], dim1D='cell_latlon' ) 608 SRF_lon = lmdz.geo2point ( 0*d_SRF_his ['lat']+ d_SRF_his ['lon'], dim1D='cell_latlon' ) 609 SRF_aire = lmdz.geo2point ( d_SRF_his ['Areas'] * d_SRF_his ['Contfrac'], dim1D='cell_latlonl', cumulPoles=True ) 610 SRF_areas = lmdz.geo2point ( d_SRF_his ['Areas'], dim1D='cell_latlonl', cumulPoles=True ) 611 SRF_contfrac = lmdz.geo2point ( d_SRF_his ['Contfrac'], dim1D='cell_latlonl' ) 612 613 #SRF_res_aire = SRF_aire 614 656 echo ('ATM grid with cell surfaces : LMDZ') 657 ATM_lat = lmdz.geo2point ( rprec (d_ATM_his ['lat'])+0*rprec (d_ATM_his ['lon']), dim1D='cell' ) 658 ATM_lon = lmdz.geo2point ( 0*rprec (d_ATM_his ['lat'])+ rprec (d_ATM_his ['lon']), dim1D='cell' ) 659 ATM_aire = lmdz.geo2point ( rprec (d_ATM_his ['aire'] ) [0], cumulPoles=True, dim1D='cell' ) 660 ATM_fter = lmdz.geo2point ( rprec (d_ATM_his ['fract_ter'][0]), dim1D='cell' ) 661 ATM_foce = lmdz.geo2point ( rprec (d_ATM_his ['fract_oce'][0]), dim1D='cell' ) 662 ATM_fsic = lmdz.geo2point ( rprec (d_ATM_his ['fract_sic'][0]), dim1D='cell' ) 663 ATM_flic = lmdz.geo2point ( rprec (d_ATM_his ['fract_lic'][0]), dim1D='cell' ) 664 SRF_lat = lmdz.geo2point ( rprec (d_SRF_his ['lat'])+0*rprec (d_SRF_his ['lon']), dim1D='cell' ) 665 SRF_lon = lmdz.geo2point ( 0*rprec (d_SRF_his ['lat'])+ rprec (d_SRF_his ['lon']), dim1D='cell' ) 666 SRF_aire = lmdz.geo2point ( rprec (d_SRF_his ['Areas']) * rprec (d_SRF_his ['Contfrac']), dim1D='cell', cumulPoles=True ) 667 SRF_areas = lmdz.geo2point ( rprec (d_SRF_his ['Areas']) , dim1D='cell', cumulPoles=True ) 668 SRF_contfrac = lmdz.geo2point ( rprec (d_SRF_his ['Contfrac']), dim1D='cell' ) 669 615 670 if ICO : 616 671 if ATM_HIS == 'latlon' : 617 jpja, jpia = d_ATM_his['aire'][0].shape 618 if wu.unDefined ( 'file_ATM_aire' ) : 619 file_ATM_aire = os.path.join ( R_IN, 'ATM', 'GRID', f'aire_{ATM}_to_{jpia}x{jpja}.nc' ) 620 config['Files']['file_ATM_aire'] = file_ATM_aire 621 echo ( f'Aire sur grille reguliere : {file_ATM_aire = }' ) 622 d_ATM_aire = xr.open_dataset ( file_ATM_aire, decode_times=False ).squeeze() 623 try : 624 ATM_lat = lmdz.geo2point ( d_ATM_his ['lat']+0*d_ATM_his ['lon'], dim1D='cell_latlon' ) 625 ATM_lon = lmdz.geo2point ( 0*d_ATM_his ['lat']+ d_ATM_his ['lon'], dim1D='cell_latlon' ) 626 except : 627 ATM_lat = lmdz.geo2point ( d_ATM_his ['lat_dom_out']+0*d_ATM_his ['lon_dom_out'], dim1D='cell_latlon' ) 628 ATM_lon = lmdz.geo2point ( 0*d_ATM_his ['lat_dom_out']+ d_ATM_his ['lon_dom_out'], dim1D='cell_latlon' ) 629 ATM_aire = lmdz.geo2point ( d_ATM_aire ['aire'].squeeze(), cumulPoles=True, dim1D='cell_latlon' ) 630 ATM_fter = lmdz.geo2point ( d_ATM_his ['fract_ter'][0], dim1D='cell_latlon' ) 631 ATM_foce = lmdz.geo2point ( d_ATM_his ['fract_oce'][0], dim1D='cell_latlon' ) 632 ATM_fsic = lmdz.geo2point ( d_ATM_his ['fract_sic'][0], dim1D='cell_latlon' ) 633 ATM_flic = lmdz.geo2point ( d_ATM_his ['fract_lic'][0], dim1D='cell_latlon' ) 672 echo ( 'ATM areas and fractions on latlon grid' ) 673 if 'lat_dom_out' in d_ATM_his.variables : 674 ATM_lat = lmdz.geo2point ( rprec (d_ATM_his ['lat_dom_out'])+0*rprec (d_ATM_his ['lon_dom_out']), dim1D='cell' ) 675 ATM_lon = lmdz.geo2point ( 0*rprec (d_ATM_his ['lat_dom_out'])+ rprec (d_ATM_his ['lon_dom_out']), dim1D='cell' ) 676 else : 677 ATM_lat = lmdz.geo2point ( rprec (d_ATM_his ['lat'])+0*rprec (d_ATM_his ['lon']), dim1D='cell' ) 678 ATM_lon = lmdz.geo2point ( 0*rprec (d_ATM_his ['lat'])+ rprec (d_ATM_his ['lon']), dim1D='cell' ) 679 ATM_aire = lmdz.geo2point ( rprec (d_ATM_his ['aire'][0]).squeeze(), cumulPoles=True, dim1D='cell' ) 680 ATM_fter = lmdz.geo2point ( rprec (d_ATM_his ['fract_ter'][0]), dim1D='cell' ) 681 ATM_foce = lmdz.geo2point ( rprec (d_ATM_his ['fract_oce'][0]), dim1D='cell' ) 682 ATM_fsic = lmdz.geo2point ( rprec (d_ATM_his ['fract_sic'][0]), dim1D='cell' ) 683 ATM_flic = lmdz.geo2point ( rprec (d_ATM_his ['fract_lic'][0]), dim1D='cell' ) 684 685 if ATM_HIS == 'ico' : 686 echo ( 'ATM areas and fractions on ICO grid' ) 687 ATM_aire = rprec (d_ATM_his ['aire'] [0])[ATM_his_keysort].squeeze() 688 ATM_lat = rprec (d_ATM_his ['lat'] )[ATM_his_keysort] 689 ATM_lon = rprec (d_ATM_his ['lon'] )[ATM_his_keysort] 690 ATM_fter = rprec (d_ATM_his ['fract_ter'][0])[ATM_his_keysort] 691 ATM_foce = rprec (d_ATM_his ['fract_oce'][0])[ATM_his_keysort] 692 ATM_fsic = rprec (d_ATM_his ['fract_sic'][0])[ATM_his_keysort] 693 ATM_flic = rprec (d_ATM_his ['fract_lic'][0])[ATM_his_keysort] 634 694 635 695 if SRF_HIS == 'latlon' : 636 try : 637 SRF_lat = lmdz.geo2point ( d_SRF_his ['lat']+0*d_SRF_his ['lon'], dim1D='cell_latlon' ) 638 SRF_lon = lmdz.geo2point ( 0*d_SRF_his ['lat']+ d_SRF_his ['lon'], dim1D='cell_latlon' ) 639 except : 640 try : 641 SRF_lat = lmdz.geo2point ( d_SRF_his ['lat_dom_out']+0*d_SRF_his ['lon_dom_out'], dim1D='cell_latlon' ) 642 SRF_lon = lmdz.geo2point ( 0*d_SRF_his ['lat_dom_out']+ d_SRF_his ['lon_dom_out'], dim1D='cell_latlon' ) 643 except : 644 SRF_lat = lmdz.geo2point ( d_SRF_his ['lat_domain_landpoints_out']+0*d_SRF_his ['lon_domain_landpoints_out'], dim1D='cell_latlon' ) 645 SRF_lon = lmdz.geo2point ( 0*d_SRF_his ['lat_domain_landpoints_out']+ d_SRF_his ['lon_domain_landpoints_out'], dim1D='cell_latlon' ) 646 SRF_areas = d_SRF_his ['Areas'].values 647 SRF_areafrac = d_SRF_his ['AreaFrac'].values 648 SRF_areas = xr.DataArray ( SRF_areas , coords=d_SRF_his ['Contfrac'].coords, dims=d_SRF_his ['Contfrac'].dims) 649 SRF_areafrac = xr.DataArray ( SRF_areafrac, coords=d_SRF_his ['Contfrac'].coords, dims=d_SRF_his ['Contfrac'].dims) 650 651 SRF_areas = lmdz.geo2point ( SRF_areas , dim1D='cell_latlon', cumulPoles=True ) 652 SRF_areafrac = lmdz.geo2point ( SRF_areafrac, dim1D='cell_latlon', cumulPoles=True ) 653 SRF_contfrac = SRF_areafrac / SRF_areas 654 SRF_aire = SRF_areafrac 655 656 if ATM_HIS == 'ico' : 657 echo ( f'Grille icosaedre' ) 658 ATM_aire = d_ATM_his ['aire'] [0][ATM_his_keysort].squeeze() 659 ATM_lat = d_ATM_his ['lat'] [ATM_his_keysort] 660 ATM_lon = d_ATM_his ['lon'] [ATM_his_keysort] 661 ATM_fter = d_ATM_his ['fract_ter'][0][ATM_his_keysort] 662 ATM_foce = d_ATM_his ['fract_oce'][0][ATM_his_keysort] 663 ATM_fsic = d_ATM_his ['fract_sic'][0][ATM_his_keysort] 664 ATM_flic = d_ATM_his ['fract_lic'][0][ATM_his_keysort] 665 666 if SRF_HIS == 'ico' : 667 SRF_lat = d_SRF_his ['lat'] [SRF_his_keysort] 668 SRF_lon = d_SRF_his ['lon'] [SRF_his_keysort] 669 SRF_areas = d_SRF_his ['Areas'] [SRF_his_keysort] 670 #SRF_areafrac = d_SRF_his ['AreaFrac'] [SRF_his_keysort] 671 SRF_contfrac = d_SRF_his ['Contfrac'][SRF_his_keysort] 696 echo ( 'SRF areas and fractions on latlon grid' ) 697 if 'lat_domain_landpoints_out' in d_SRF_his : 698 SRF_lat = lmdz.geo2point ( rprec (d_SRF_his ['lat_domain_landpoints_out'])+0*rprec (d_SRF_his ['lon_domain_landpoints_out']), dim1D='cell' ) 699 SRF_lon = lmdz.geo2point ( 0*rprec (d_SRF_his ['lat_domain_landpoints_out'])+ rprec (d_SRF_his ['lon_domain_landpoints_out']), dim1D='cell' ) 700 else : 701 if 'lat_domain_landpoints_out' in d_SRF_his : 702 SRF_lat = lmdz.geo2point ( rprec (d_SRF_his ['lat_dom_out'])+0*rprec (d_SRF_his ['lon_dom_out']), dim1D='cell' ) 703 SRF_lon = lmdz.geo2point ( 0*rprec (d_SRF_his ['lat_dom_out'])+ rprec (d_SRF_his ['lon_dom_out']), dim1D='cell' ) 704 else : 705 SRF_lat = lmdz.geo2point ( rprec (d_SRF_his ['lat'])+0*rprec (d_SRF_his ['lon']), dim1D='cell' ) 706 SRF_lon = lmdz.geo2point ( 0*rprec (d_SRF_his ['lat'])+ rprec (d_SRF_his ['lon']), dim1D='cell' ) 707 708 SRF_areas = lmdz.geo2point ( rprec (d_SRF_his ['Areas'] ) , dim1D='cell', cumulPoles=True ) 709 SRF_areafrac = lmdz.geo2point ( rprec (d_SRF_his ['AreaFrac']) , dim1D='cell', cumulPoles=True ) 710 SRF_contfrac = lmdz.geo2point ( rprec (d_SRF_his ['Contfrac']) , dim1D='cell', cumulPoles=True ) 711 SRF_aire = SRF_areafrac 712 713 if SRF_HIS == 'ico' : 714 echo ( 'SRF areas and fractions on latlon grid' ) 715 SRF_lat = rprec (d_SRF_his ['lat'] ) [SRF_his_keysort] 716 SRF_lon = rprec (d_SRF_his ['lon'] ) [SRF_his_keysort] 717 SRF_areas = rprec (d_SRF_his ['Areas'] ) [SRF_his_keysort] 718 SRF_contfrac = rprec (d_SRF_his ['Contfrac']) [SRF_his_keysort] 672 719 SRF_aire = SRF_areas * SRF_contfrac 673 720 … … 681 728 ATM_aire_fsea = ATM_aire * ATM_fsea 682 729 683 SRF_aire = SRF_aire.where ( np.abs (SRF_aire) < 1E15, 0. )730 #SRF_aire = SRF_aire.where ( np.abs (SRF_aire) < 1E15, 0. ) 684 731 685 732 ## Write the full configuration … … 713 760 DYN_fsea = ATM_fsea 714 761 DYN_flnd = ATM_flnd 715 DYN_fter = d_ATM_beg['FTER']716 DYN_flic = d_ATM_beg['FLIC']762 DYN_fter = rprec (d_ATM_beg['FTER']) 763 DYN_flic = rprec (d_ATM_beg['FLIC']) 717 764 DYN_aire_fter = DYN_aire * DYN_fter 718 765 … … 728 775 return ATM_flux_int 729 776 777 def LIC_flux_int (flux) : 778 '''Integrate (* time * surface) flux on land ice grid''' 779 LIC_flux_int = wu.Psum ( (flux * dtime_per_sec * ATM_aire_flic).to_masked_array().ravel() ) 780 return LIC_flux_int 781 730 782 def SRF_stock_int (stock) : 731 783 '''Integrate (* surface) stock on land grid''' … … 749 801 return ONE_flux_int 750 802 803 def Sprec ( tlist ) : 804 '''Accurate sum of list of scalar elements''' 805 return wu.Psum ( np.array ( tlist) ) 806 751 807 ATM_aire_sea = ATM_aire * ATM_fsea 808 752 809 ATM_aire_tot = ONE_stock_int (ATM_aire) 753 ATM_aire_sea_tot = ONE_stock_int (ATM_aire*ATM_fsea) 754 755 DYN_aire_tot = ONE_stock_int ( DYN_aire ) 756 SRF_aire_tot = ONE_stock_int ( SRF_aire ) 810 ATM_aire_sea_tot = ONE_stock_int (ATM_aire_fsea) 811 ATM_aire_ter_tot = ONE_stock_int (ATM_aire_fter) 812 ATM_aire_lic_tot = ONE_stock_int (ATM_aire_flic) 813 814 DYN_aire_tot = ONE_stock_int ( DYN_aire ) 815 SRF_aire_tot = ONE_stock_int ( SRF_aire ) 757 816 758 817 echo ('') 759 echo ( f'ATM DYN : Area of atmosphere : {DYN_aire_tot:18.9e}' ) 760 echo ( f'ATM HIS : Area of atmosphere : {ATM_aire_tot:18.9e}' ) 761 echo ( f'ATM SRF : Area of atmosphere : {SRF_aire_tot:18.9e}' ) 818 echo ( f'ATM DYN : Area of atmosphere : {DYN_aire_tot:18.9e}' ) 819 echo ( f'ATM HIS : Area of atmosphere : {ATM_aire_tot:18.9e}' ) 820 echo ( f'ATM HIS : Area of ter in atmosphere : {ATM_aire_ter_tot:18.9e}' ) 821 echo ( f'ATM HIS : Area of lic in atmosphere : {ATM_aire_lic_tot:18.9e}' ) 822 echo ( f'ATM SRF : Area of atmosphere : {SRF_aire_tot:18.9e}' ) 762 823 echo ('') 763 echo ( 'ATM DYN : Area of atmosphere/(4pi R^2) : {:18.9f}'.format(DYN_aire_tot/(Ra*Ra*4*np.pi) ) ) 764 echo ( 'ATM HIS : Area of atmosphere/(4pi R^2) : {:18.9f}'.format(ATM_aire_tot/(Ra*Ra*4*np.pi) ) ) 765 echo ( 'ATM SRF : Area of atmosphere/(4pi R^2) : {:18.9f}'.format(SRF_aire_tot/(Ra*Ra*4*np.pi) ) ) 824 echo ( 'ATM DYN : Area of atmosphere/(4pi R^2) : {:18.9f}'.format(DYN_aire_tot/(Ra*Ra*4*np.pi) ) ) 825 echo ( 'ATM HIS : Area of atmosphere/(4pi R^2) : {:18.9f}'.format(ATM_aire_tot/(Ra*Ra*4*np.pi) ) ) 826 echo ( 'ATM HIS : Area of ter in atmosphere/(4pi R^2) : {:18.9f}'.format(ATM_aire_ter_tot/(Ra*Ra*4*np.pi) ) ) 827 echo ( 'ATM SRF : Area of atmosphere/(4pi R^2) : {:18.9f}'.format(SRF_aire_tot/(Ra*Ra*4*np.pi) ) ) 766 828 echo ('') 767 829 echo ( f'ATM SRF : Area of atmosphere (no contfrac): {ONE_stock_int (SRF_areas):18.9e}' ) … … 786 848 DYN_psol_end = d_DYN_end['ps'][DYN_end_keysort] 787 849 if LMDZ : 788 DYN_psol_beg = lmdz.geo2point ( d_DYN_beg['ps'].isel(rlonv=slice(0,-1)), dim1D='cell _latlon' )789 DYN_psol_end = lmdz.geo2point ( d_DYN_end['ps'].isel(rlonv=slice(0,-1)), dim1D='cell _latlon' )850 DYN_psol_beg = lmdz.geo2point ( d_DYN_beg['ps'].isel(rlonv=slice(0,-1)), dim1D='cell' ) 851 DYN_psol_end = lmdz.geo2point ( d_DYN_end['ps'].isel(rlonv=slice(0,-1)), dim1D='cell' ) 790 852 791 853 echo ( '3D Pressure at the interface layers (not scalar points)' ) … … 793 855 DYN_pres_end = ATM_Ahyb + ATM_Bhyb * DYN_psol_end 794 856 857 echo ( 'Check computation of pressure levels' ) 858 859 ind = np.empty (8) 860 861 ind[0] = (DYN_pres_beg[ 0]-DYN_psol_beg).min().item() 862 ind[1] = (DYN_pres_beg[ 0]-DYN_psol_beg).max().item() 863 ind[2] = (DYN_pres_beg[-1]).min().item() 864 ind[3] = (DYN_pres_beg[-1]).max().item() 865 ind[4] = (DYN_pres_end[ 0]-DYN_psol_end).min().item() 866 ind[5] = (DYN_pres_end[ 0]-DYN_psol_end).max().item() 867 ind[6] = (DYN_pres_end[-1]).min().item() 868 ind[7] = (DYN_pres_end[-1]).max().item() 869 870 if any ( ind != 0) : 871 echo ( 'All values should be zero' ) 872 echo ( f'(DYN_pres_beg[ 0]-DYN_psol_beg).min().item() = {ind[0]}' ) 873 echo ( f'(DYN_pres_beg[ 0]-DYN_psol_beg).max().item() = {ind[1]}' ) 874 echo ( f'(DYN_pres_beg[-1]).min().item() = {ind[2]}' ) 875 echo ( f'(DYN_pres_beg[-1]).max().item() = {ind[3]}' ) 876 echo ( f'(DYN_pres_end[ 0]-DYN_psol_end).min().item() = {ind[4]}' ) 877 echo ( f'(DYN_pres_end[ 0]-DYN_psol_end).max().item() = {ind[5]}' ) 878 echo ( f'(DYN_pres_end[-1]).min().item() = {ind[6]}' ) 879 echo ( f'(DYN_pres_end[-1]).max().item() = {ind[7]}' ) 880 raise Exception 881 795 882 klevp1 = ATM_Bhyb.shape[-1] 796 883 cell = DYN_psol_beg.shape[-1] … … 798 885 799 886 echo ( 'Layer thickness (pressure)' ) 800 DYN_dpres_beg = xr.DataArray ( np.empty( (klev, cell )), dims = ('sigs', 'cell'), coords=(np.arange(klev), np.arange(cell) ) ) 801 DYN_dpres_end = xr.DataArray ( np.empty( (klev, cell )), dims = ('sigs', 'cell'), coords=(np.arange(klev), np.arange(cell) ) ) 802 803 for k in np.arange (klevp1-1) : 804 DYN_dpres_beg[k,:] = DYN_pres_beg[k,:] - DYN_pres_beg[k+1,:] 805 DYN_dpres_end[k,:] = DYN_pres_end[k,:] - DYN_pres_end[k+1,:] 887 DYN_mass_beg = xr.DataArray ( np.empty( (klev, cell)), dims = ('sigs', 'cell'), coords=(np.arange(klev), np.arange(cell) ) ) 888 DYN_mass_end = xr.DataArray ( np.empty( (klev, cell)), dims = ('sigs', 'cell'), coords=(np.arange(klev), np.arange(cell) ) ) 889 890 for k in np.arange (klev) : 891 DYN_mass_beg[k,:] = ( DYN_pres_beg[k,:] - DYN_pres_beg[k+1,:] ) / Grav 892 DYN_mass_end[k,:] = ( DYN_pres_end[k,:] - DYN_pres_end[k+1,:] ) / Grav 893 894 DYN_mass_beg_2D = DYN_mass_beg.sum (dim='sigs') 895 DYN_mass_end_2D = DYN_mass_end.sum (dim='sigs') 896 897 DYN_mas_air_beg = DYN_stock_int ( DYN_mass_beg_2D ) 898 DYN_mas_air_end = DYN_stock_int ( DYN_mass_end_2D ) 806 899 807 900 echo ( 'Vertical and horizontal integral, and sum of liquid, solid and vapor water phases' ) 808 901 if LMDZ : 809 try : 810 DYN_wat_beg = lmdz.geo3point ( (d_DYN_beg['H2Ov'] + d_DYN_beg['H2Ol'] + d_DYN_beg['H2Oi'] ).isel(rlonv=slice(0,-1) ), dim1D='cell' ) 811 DYN_wat_end = lmdz.geo3point ( (d_DYN_end['H2Ov'] + d_DYN_end['H2Ol'] + d_DYN_end['H2Oi'] ).isel(rlonv=slice(0,-1) ), dim1D='cell' ) 812 except : 902 if 'H2Ov' in d_DYN_beg.variables : 903 echo ('reading LATLON : H2Ov, H2Ol, H2Oi' ) 904 DYN_wat_beg = lmdz.geo3point ( d_DYN_beg['H2Ov'] + d_DYN_beg['H2Ol'] + d_DYN_beg['H2Oi'].isel(rlonv=slice(0,-1) ), dim1D='cell' ) 905 DYN_wat_end = lmdz.geo3point ( d_DYN_end['H2Ov'] + d_DYN_end['H2Ol'] + d_DYN_end['H2Oi'].isel(rlonv=slice(0,-1) ), dim1D='cell' ) 906 if 'H2Ov_g' in d_DYN_beg.variables : 907 echo ('reading LATLON : H2O_g, H2O_l, H2O_s' ) 813 908 DYN_wat_beg = lmdz.geo3point ( (d_DYN_beg['H2O_g'] + d_DYN_beg['H2O_l'] + d_DYN_beg['H2O_s']).isel(rlonv=slice(0,-1) ), dim1D='cell' ) 814 909 DYN_wat_end = lmdz.geo3point ( (d_DYN_end['H2O_g'] + d_DYN_end['H2O_l'] + d_DYN_end['H2O_s']).isel(rlonv=slice(0,-1) ), dim1D='cell' ) 815 910 if ICO : 816 try : 911 if 'H2Ov_g' in d_DYN_beg.variables : 912 echo ('reading ICO : H2O_g, H2O_l, H2O_s' ) 817 913 DYN_wat_beg = (d_DYN_beg['H2O_g'] + d_DYN_beg['H2O_l'] + d_DYN_beg['H2O_s'])[..., DYN_beg_keysort] 818 914 DYN_wat_end = (d_DYN_end['H2O_g'] + d_DYN_end['H2O_l'] + d_DYN_end['H2O_s'])[..., DYN_beg_keysort] 819 820 except : 915 elif 'H2O_g' in d_DYN_beg.variables : 916 echo ('reading ICO : H2O_g, H2O_l, H2O_s' ) 917 DYN_wat_beg = (d_DYN_beg['H2O_g'] + d_DYN_beg['H2O_l'] + d_DYN_beg['H2O_s'])[..., DYN_beg_keysort] 918 DYN_wat_end = (d_DYN_end['H2O_g'] + d_DYN_end['H2O_l'] + d_DYN_end['H2O_s'])[..., DYN_beg_keysort] 919 elif 'q' in d_DYN_beg.variables : 920 echo ('reading ICO : q' ) 821 921 DYN_wat_beg = (d_DYN_beg['q'].isel(nq=0) + d_DYN_beg['q'].isel(nq=1) + d_DYN_beg['q'].isel(nq=2) )[..., DYN_beg_keysort] 822 922 DYN_wat_end = (d_DYN_end['q'].isel(nq=0) + d_DYN_end['q'].isel(nq=1) + d_DYN_end['q'].isel(nq=2) )[..., DYN_beg_keysort] 823 923 924 if 'lev' in DYN_wat_beg.dims : 824 925 DYN_wat_beg = DYN_wat_beg.rename ( {'lev':'sigs'} ) 825 DYN_wat_ beg= DYN_wat_end.rename ( {'lev':'sigs'} )926 DYN_wat_end = DYN_wat_end.rename ( {'lev':'sigs'} ) 826 927 827 928 echo ( 'Compute water content : vertical and horizontal integral' ) 828 DYN_mas_wat_beg = DYN_stock_int ( (DYN_dpres_beg * DYN_wat_beg).sum (dim='sigs') ) / Grav 829 DYN_mas_wat_end = DYN_stock_int ( (DYN_dpres_end * DYN_wat_end).sum (dim='sigs') ) / Grav 929 930 DYN_wat_beg_2D = (DYN_mass_beg * DYN_wat_beg).sum (dim='sigs') 931 DYN_wat_end_2D = (DYN_mass_end * DYN_wat_end).sum (dim='sigs') 932 933 DYN_mas_wat_beg = DYN_stock_int ( DYN_wat_beg_2D ) 934 DYN_mas_wat_end = DYN_stock_int ( DYN_wat_end_2D ) 830 935 831 936 echo ( 'Variation of water content' ) 832 937 dDYN_mas_wat = DYN_mas_wat_end - DYN_mas_wat_beg 833 938 834 # \([a-z,A-Z,_]*\)/dtime_sec\*1e-9 kg2Sv(\1)835 # \([a-z,A-Z,_]*\)\/ATM_aire_sea_tot\/ATM_rho\/NbYear kg2myear(\1)836 837 939 echo ( f'\nChange of atmosphere water content (dynamics) -- {Title} ' ) 838 940 echo ( '------------------------------------------------------------------------------------' ) 839 echo ( 'DYN_mas_beg = {:12.6e} kg | DYN_mas_end = {:12.6e} kg'.format (DYN_mas_wat_beg, DYN_mas_wat_end) ) 941 echo ( 'DYN_mas_air_beg = {:12.6e} kg | DYN_mas_air_end = {:12.6e} kg'.format (DYN_mas_air_beg, DYN_mas_air_end) ) 942 echo ( 'DYN_mas_wat_beg = {:12.6e} kg | DYN_mas_wat_end = {:12.6e} kg'.format (DYN_mas_wat_beg, DYN_mas_wat_end) ) 840 943 prtFlux ( 'dMass (atm) ', dDYN_mas_wat, 'e', True ) 841 944 … … 850 953 d_ATM_end['QS03'] *d_ATM_end['FOCE'] + d_ATM_end['QS04'] *d_ATM_end['FSIC'] 851 954 852 ATM_qsol_beg = d_ATM_beg['QSOL']853 ATM_qsol_end = d_ATM_end['QSOL']955 ATM_qsol_beg = d_ATM_beg['QSOL'] 956 ATM_qsol_end = d_ATM_end['QSOL'] 854 957 855 958 LIC_sno_beg = d_ATM_beg['SNOW02']*d_ATM_beg['FLIC'] … … 859 962 LIC_runlic0_end = d_ATM_end['RUNOFFLIC0'] 860 963 861 ATM_qs01_beg = d_ATM_beg['QS01'] * d_ATM_beg['FTER'] 862 ATM_qs01_end = d_ATM_end['QS01'] * d_ATM_end['FTER'] 863 ATM_qs02_beg = d_ATM_beg['QS02'] * d_ATM_beg['FLIC'] 864 ATM_qs02_end = d_ATM_end['QS02'] * d_ATM_end['FLIC'] 865 ATM_qs03_beg = d_ATM_beg['QS03'] * d_ATM_beg['FOCE'] 866 ATM_qs03_end = d_ATM_end['QS03'] * d_ATM_end['FOCE'] 867 ATM_qs04_beg = d_ATM_beg['QS04'] * d_ATM_beg['FSIC'] 868 ATM_qs04_end = d_ATM_end['QS04'] * d_ATM_end['FSIC'] 964 ATM_qs01_beg = d_ATM_beg['QS01'] * d_ATM_beg['FTER'] 965 ATM_qs02_beg = d_ATM_beg['QS02'] * d_ATM_beg['FLIC'] 966 ATM_qs03_beg = d_ATM_beg['QS03'] * d_ATM_beg['FOCE'] 967 ATM_qs04_beg = d_ATM_beg['QS04'] * d_ATM_beg['FSIC'] 968 969 ATM_qs01_end = d_ATM_end['QS01'] * d_ATM_end['FTER'] 970 ATM_qs02_end = d_ATM_end['QS02'] * d_ATM_end['FLIC'] 971 ATM_qs03_end = d_ATM_end['QS03'] * d_ATM_end['FOCE'] 972 ATM_qs04_end = d_ATM_end['QS04'] * d_ATM_end['FSIC'] 869 973 870 974 if ICO : 871 ATM_sno_beg 872 ATM_sno_end 873 ATM_qs_beg 874 ATM_qs_end 875 ATM_qsol_beg 876 ATM_qs ol_end = ATM_qsol_end [ATM_end_keysort]877 ATM_qs0 1_beg = ATM_qs01_beg [ATM_beg_keysort]878 ATM_qs0 1_end = ATM_qs01_end [ATM_end_keysort]879 ATM_qs0 2_beg = ATM_qs02_beg [ATM_beg_keysort]880 ATM_qs 02_end = ATM_qs02_end [ATM_end_keysort]881 ATM_qs0 3_beg = ATM_qs03_beg [ATM_beg_keysort]882 ATM_qs0 3_end = ATM_qs03_end [ATM_end_keysort]883 ATM_qs0 4_beg = ATM_qs04_beg [ATM_beg_keysort]884 ATM_qs04_end 885 LIC_sno_beg 886 LIC_sno_end 887 LIC_runlic0_beg 888 LIC_runlic0_end 975 ATM_sno_beg = ATM_sno_beg [ATM_beg_keysort] 976 ATM_sno_end = ATM_sno_end [ATM_end_keysort] 977 ATM_qs_beg = ATM_qs_beg [ATM_beg_keysort] 978 ATM_qs_end = ATM_qs_end [ATM_end_keysort] 979 ATM_qsol_beg = ATM_qsol_beg [ATM_beg_keysort] 980 ATM_qs01_beg = ATM_qs01_beg [ATM_beg_keysort] 981 ATM_qs02_beg = ATM_qs02_beg [ATM_beg_keysort] 982 ATM_qs03_beg = ATM_qs03_beg [ATM_beg_keysort] 983 ATM_qs04_beg = ATM_qs04_beg [ATM_beg_keysort] 984 ATM_qsol_end = ATM_qsol_end [ATM_end_keysort] 985 ATM_qs01_end = ATM_qs01_end [ATM_end_keysort] 986 ATM_qs02_end = ATM_qs02_end [ATM_end_keysort] 987 ATM_qs03_end = ATM_qs03_end [ATM_end_keysort] 988 ATM_qs04_end = ATM_qs04_end [ATM_end_keysort] 989 LIC_sno_beg = LIC_sno_beg [ATM_beg_keysort] 990 LIC_sno_end = LIC_sno_end [ATM_end_keysort] 991 LIC_runlic0_beg = LIC_runlic0_beg[ATM_beg_keysort] 992 LIC_runlic0_end = LIC_runlic0_end[ATM_end_keysort] 889 993 890 994 LIC_qs_beg = ATM_qs02_beg … … 897 1001 ATM_mas_qs_end = DYN_stock_int ( ATM_qs_end ) 898 1002 ATM_mas_qsol_beg = DYN_stock_int ( ATM_qsol_beg ) 1003 ATM_mas_qs01_beg = DYN_stock_int ( ATM_qs01_beg ) 1004 ATM_mas_qs02_beg = DYN_stock_int ( ATM_qs02_beg ) 1005 ATM_mas_qs03_beg = DYN_stock_int ( ATM_qs03_beg ) 1006 ATM_mas_qs04_beg = DYN_stock_int ( ATM_qs04_beg ) 899 1007 ATM_mas_qsol_end = DYN_stock_int ( ATM_qsol_end ) 900 ATM_mas_qs01_beg = DYN_stock_int ( ATM_qs01_beg )901 1008 ATM_mas_qs01_end = DYN_stock_int ( ATM_qs01_end ) 902 ATM_mas_qs02_beg = DYN_stock_int ( ATM_qs02_beg )903 1009 ATM_mas_qs02_end = DYN_stock_int ( ATM_qs02_end ) 904 ATM_mas_qs03_beg = DYN_stock_int ( ATM_qs03_beg )905 1010 ATM_mas_qs03_end = DYN_stock_int ( ATM_qs03_end ) 906 ATM_mas_qs04_beg = DYN_stock_int ( ATM_qs04_beg )907 1011 ATM_mas_qs04_end = DYN_stock_int ( ATM_qs04_end ) 908 1012 … … 929 1033 dLIC_mas_sno = LIC_mas_sno_end - LIC_mas_sno_beg 930 1034 dLIC_mas_runlic0 = LIC_mas_runlic0_end - LIC_mas_runlic0_beg 931 dLIC_mas_wat = dLIC_mas_qs + dLIC_mas_sno 1035 1036 dLIC_mas_wat = dLIC_mas_qs + dLIC_mas_sno # + dLIC_mas_runlic0 932 1037 933 1038 echo ( f'\nChange of atmosphere snow content (Land ice) -- {Title} ' ) … … 980 1085 RUN_mas_wat_pond_end = ONE_stock_int ( d_SRF_end ['pondres'] ) 981 1086 982 RUN_mas_wat_beg = RUN_mas_wat_fast_beg + RUN_mas_wat_slow_beg + RUN_mas_wat_stream_beg + \ 983 RUN_mas_wat_flood_beg + RUN_mas_wat_lake_beg + RUN_mas_wat_pond_beg 984 RUN_mas_wat_end = RUN_mas_wat_fast_end + RUN_mas_wat_slow_end + RUN_mas_wat_stream_end + \ 985 RUN_mas_wat_flood_end + RUN_mas_wat_lake_end + RUN_mas_wat_pond_end 1087 RUN_mas_wat_beg = Sprec ( [RUN_mas_wat_fast_beg , RUN_mas_wat_slow_beg, RUN_mas_wat_stream_beg, 1088 RUN_mas_wat_flood_beg, RUN_mas_wat_lake_beg, RUN_mas_wat_pond_beg] ) 1089 1090 RUN_mas_wat_end = Sprec ( [RUN_mas_wat_fast_end , RUN_mas_wat_slow_end , RUN_mas_wat_stream_end, 1091 RUN_mas_wat_flood_end , RUN_mas_wat_lake_end , RUN_mas_wat_pond_end] ) 986 1092 987 1093 dRUN_mas_wat_fast = RUN_mas_wat_fast_end - RUN_mas_wat_fast_beg … … 1032 1138 1033 1139 if LMDZ : 1034 SRF_tot_watveg_beg = lmdz.geo2point (SRF_tot_watveg_beg , dim1D='cell _latlon')1035 SRF_tot_watsoil_beg = lmdz.geo2point (SRF_tot_watsoil_beg, dim1D='cell _latlon')1036 SRF_snow_beg = lmdz.geo2point (SRF_snow_beg , dim1D='cell _latlon')1037 SRF_lakeres_beg = lmdz.geo2point (SRF_lakeres_beg , dim1D='cell _latlon')1038 SRF_tot_watveg_end = lmdz.geo2point (SRF_tot_watveg_end , dim1D='cell _latlon')1039 SRF_tot_watsoil_end = lmdz.geo2point (SRF_tot_watsoil_end, dim1D='cell _latlon')1040 SRF_snow_end = lmdz.geo2point (SRF_snow_end , dim1D='cell _latlon')1041 SRF_lakeres_end = lmdz.geo2point (SRF_lakeres_end , dim1D='cell _latlon')1140 SRF_tot_watveg_beg = lmdz.geo2point (SRF_tot_watveg_beg , dim1D='cell') 1141 SRF_tot_watsoil_beg = lmdz.geo2point (SRF_tot_watsoil_beg, dim1D='cell') 1142 SRF_snow_beg = lmdz.geo2point (SRF_snow_beg , dim1D='cell') 1143 SRF_lakeres_beg = lmdz.geo2point (SRF_lakeres_beg , dim1D='cell') 1144 SRF_tot_watveg_end = lmdz.geo2point (SRF_tot_watveg_end , dim1D='cell') 1145 SRF_tot_watsoil_end = lmdz.geo2point (SRF_tot_watsoil_end, dim1D='cell') 1146 SRF_snow_end = lmdz.geo2point (SRF_snow_end , dim1D='cell') 1147 SRF_lakeres_end = lmdz.geo2point (SRF_lakeres_end , dim1D='cell') 1042 1148 1043 1149 if ICO : … … 1053 1159 # Stock dSoilHum dInterce dSWE dStream dFastR dSlowR dLake dPond dFlood 1054 1160 1055 SRF_wat_beg = SRF_tot_watveg_beg + SRF_tot_watsoil_beg + SRF_snow_beg 1161 SRF_wat_beg = SRF_tot_watveg_beg + SRF_tot_watsoil_beg + SRF_snow_beg 1056 1162 SRF_wat_end = SRF_tot_watveg_end + SRF_tot_watsoil_end + SRF_snow_end 1057 1163 … … 1079 1185 print (' -- ') ; sys.stdout.flush () 1080 1186 1081 dSRF_mas_watveg = S RF_mas_watveg_end - SRF_mas_watveg_beg1082 dSRF_mas_watsoil = S RF_mas_watsoil_end - SRF_mas_watsoil_beg1083 dSRF_mas_snow = S RF_mas_snow_end - SRF_mas_snow_beg1084 dSRF_mas_lake = S RF_mas_lake_end - SRF_mas_lake_beg1187 dSRF_mas_watveg = Sprec ( [SRF_mas_watveg_end , -SRF_mas_watveg_beg] ) 1188 dSRF_mas_watsoil = Sprec ( [SRF_mas_watsoil_end, -SRF_mas_watsoil_beg] ) 1189 dSRF_mas_snow = Sprec ( [SRF_mas_snow_end , -SRF_mas_snow_beg] ) 1190 dSRF_mas_lake = Sprec ( [SRF_mas_lake_end , -SRF_mas_lake_beg] ) 1085 1191 1086 1192 echo ( '------------------------------------------------------------------------------------' ) … … 1096 1202 prtFlux ( 'dMass (lake) ', dSRF_mas_lake , 'e' , True ) 1097 1203 1098 SRF_mas_wat_beg = SRF_mas_watveg_beg + SRF_mas_watsoil_beg + SRF_mas_snow_beg 1099 SRF_mas_wat_end = SRF_mas_watveg_end + SRF_mas_watsoil_end + SRF_mas_snow_end 1100 dSRF_mas_wat = SRF_mas_wat_end - SRF_mas_wat_beg 1204 SRF_mas_wat_beg = Sprec ( [SRF_mas_watveg_beg , SRF_mas_watsoil_beg, SRF_mas_snow_beg] ) 1205 SRF_mas_wat_end = Sprec ( [SRF_mas_watveg_end , SRF_mas_watsoil_end, SRF_mas_snow_end] ) 1206 1207 dSRF_mas_wat = Sprec ( [+SRF_mas_watveg_end , +SRF_mas_watsoil_end, +SRF_mas_snow_end, 1208 -SRF_mas_watveg_beg , -SRF_mas_watsoil_beg, -SRF_mas_snow_beg] ) 1101 1209 1102 1210 echo ( '------------------------------------------------------------------------------------' ) … … 1115 1223 echo ( f'-- ATM Fluxes -- {Title} ' ) 1116 1224 1117 Step=11118 print ( 'Step {Step}', end='' ) ; Step += 11119 1225 if ATM_HIS == 'latlon' : 1120 ATM_wbilo_oce = lmdz.geo2point ( d_ATM_his ['wbilo_oce'], dim1D='cell_latlon' ) 1121 ATM_wbilo_sic = lmdz.geo2point ( d_ATM_his ['wbilo_sic'], dim1D='cell_latlon' ) 1122 ATM_wbilo_ter = lmdz.geo2point ( d_ATM_his ['wbilo_ter'], dim1D='cell_latlon' ) 1123 ATM_wbilo_lic = lmdz.geo2point ( d_ATM_his ['wbilo_lic'], dim1D='cell_latlon' ) 1124 ATM_runofflic = lmdz.geo2point ( d_ATM_his ['runofflic'], dim1D='cell_latlon' ) 1125 ATM_fqcalving = lmdz.geo2point ( d_ATM_his ['fqcalving'], dim1D='cell_latlon' ) 1126 ATM_fqfonte = lmdz.geo2point ( d_ATM_his ['fqfonte'] , dim1D='cell_latlon' ) 1127 ATM_precip = lmdz.geo2point ( d_ATM_his ['precip'] , dim1D='cell_latlon' ) 1128 ATM_snowf = lmdz.geo2point ( d_ATM_his ['snow'] , dim1D='cell_latlon' ) 1129 ATM_evap = lmdz.geo2point ( d_ATM_his ['evap'] , dim1D='cell_latlon' ) 1130 ATM_wevap_ter = lmdz.geo2point ( d_ATM_his ['wevap_ter'], dim1D='cell_latlon' ) 1131 ATM_wevap_oce = lmdz.geo2point ( d_ATM_his ['wevap_oce'], dim1D='cell_latlon' ) 1132 ATM_wevap_lic = lmdz.geo2point ( d_ATM_his ['wevap_lic'], dim1D='cell_latlon' ) 1133 ATM_wevap_sic = lmdz.geo2point ( d_ATM_his ['wevap_sic'], dim1D='cell_latlon' ) 1134 1135 ATM_wrain_ter = lmdz.geo2point ( d_ATM_his ['wrain_ter'], dim1D='cell_latlon' ) 1136 ATM_wrain_oce = lmdz.geo2point ( d_ATM_his ['wrain_oce'], dim1D='cell_latlon' ) 1137 ATM_wrain_lic = lmdz.geo2point ( d_ATM_his ['wrain_lic'], dim1D='cell_latlon' ) 1138 ATM_wrain_sic = lmdz.geo2point ( d_ATM_his ['wrain_sic'], dim1D='cell_latlon' ) 1139 1140 ATM_wsnow_ter = lmdz.geo2point ( d_ATM_his ['wsnow_ter'], dim1D='cell_latlon' ) 1141 ATM_wsnow_oce = lmdz.geo2point ( d_ATM_his ['wsnow_oce'], dim1D='cell_latlon' ) 1142 ATM_wsnow_lic = lmdz.geo2point ( d_ATM_his ['wsnow_lic'], dim1D='cell_latlon' ) 1143 ATM_wsnow_sic = lmdz.geo2point ( d_ATM_his ['wsnow_sic'], dim1D='cell_latlon' ) 1144 1145 ATM_wevap_ter = lmdz.geo2point ( d_ATM_his ['wevap_ter'], dim1D='cell_latlon' ) 1146 ATM_wevap_oce = lmdz.geo2point ( d_ATM_his ['wevap_oce'], dim1D='cell_latlon' ) 1147 ATM_wevap_lic = lmdz.geo2point ( d_ATM_his ['wevap_lic'], dim1D='cell_latlon' ) 1148 ATM_wevap_sic = lmdz.geo2point ( d_ATM_his ['wevap_sic'], dim1D='cell_latlon' ) 1149 1150 ATM_runofflic = lmdz.geo2point ( d_ATM_his ['runofflic'], dim1D='cell_latlon' ) 1151 1152 print ( 'Step {Step}', end='' ) ; Step += 1 1226 echo ( ' latlon case' ) 1227 ATM_wbilo_oce = lmdz.geo2point ( rprec (d_ATM_his ['wbilo_oce']), dim1D='cell' ) 1228 ATM_wbilo_sic = lmdz.geo2point ( rprec (d_ATM_his ['wbilo_sic']), dim1D='cell' ) 1229 ATM_wbilo_ter = lmdz.geo2point ( rprec (d_ATM_his ['wbilo_ter']), dim1D='cell' ) 1230 ATM_wbilo_lic = lmdz.geo2point ( rprec (d_ATM_his ['wbilo_lic']), dim1D='cell' ) 1231 ATM_runofflic = lmdz.geo2point ( rprec (d_ATM_his ['runofflic']), dim1D='cell' ) 1232 ATM_fqcalving = lmdz.geo2point ( rprec (d_ATM_his ['fqcalving']), dim1D='cell' ) 1233 ATM_fqfonte = lmdz.geo2point ( rprec (d_ATM_his ['fqfonte'] ), dim1D='cell' ) 1234 ATM_precip = lmdz.geo2point ( rprec (d_ATM_his ['precip'] ), dim1D='cell' ) 1235 ATM_snowf = lmdz.geo2point ( rprec (d_ATM_his ['snow'] ), dim1D='cell' ) 1236 ATM_evap = lmdz.geo2point ( rprec (d_ATM_his ['evap'] ), dim1D='cell' ) 1237 ATM_wevap_ter = lmdz.geo2point ( rprec (d_ATM_his ['wevap_ter']), dim1D='cell' ) 1238 ATM_wevap_oce = lmdz.geo2point ( rprec (d_ATM_his ['wevap_oce']), dim1D='cell' ) 1239 ATM_wevap_lic = lmdz.geo2point ( rprec (d_ATM_his ['wevap_lic']), dim1D='cell' ) 1240 ATM_wevap_sic = lmdz.geo2point ( rprec (d_ATM_his ['wevap_sic']), dim1D='cell' ) 1241 ATM_wrain_ter = lmdz.geo2point ( rprec (d_ATM_his ['wrain_ter']), dim1D='cell' ) 1242 ATM_wrain_oce = lmdz.geo2point ( rprec (d_ATM_his ['wrain_oce']), dim1D='cell' ) 1243 ATM_wrain_lic = lmdz.geo2point ( rprec (d_ATM_his ['wrain_lic']), dim1D='cell' ) 1244 ATM_wrain_sic = lmdz.geo2point ( rprec (d_ATM_his ['wrain_sic']), dim1D='cell' ) 1245 ATM_wsnow_ter = lmdz.geo2point ( rprec (d_ATM_his ['wsnow_ter']), dim1D='cell' ) 1246 ATM_wsnow_oce = lmdz.geo2point ( rprec (d_ATM_his ['wsnow_oce']), dim1D='cell' ) 1247 ATM_wsnow_lic = lmdz.geo2point ( rprec (d_ATM_his ['wsnow_lic']), dim1D='cell' ) 1248 ATM_wsnow_sic = lmdz.geo2point ( rprec (d_ATM_his ['wsnow_sic']), dim1D='cell' ) 1249 ATM_runofflic = lmdz.geo2point ( rprec (d_ATM_his ['runofflic']), dim1D='cell' ) 1250 echo ( f'End of LATLON case') 1251 1153 1252 if ATM_HIS == 'ico' : 1154 ATM_wbilo_oce = d_ATM_his ['wbilo_oce'][..., ATM_his_keysort] 1155 ATM_wbilo_sic = d_ATM_his ['wbilo_sic'][..., ATM_his_keysort] 1156 ATM_wbilo_ter = d_ATM_his ['wbilo_ter'][..., ATM_his_keysort] 1157 ATM_wbilo_lic = d_ATM_his ['wbilo_lic'][..., ATM_his_keysort] 1158 ATM_runofflic = d_ATM_his ['runofflic'][..., ATM_his_keysort] 1159 ATM_fqcalving = d_ATM_his ['fqcalving'][..., ATM_his_keysort] 1160 ATM_fqfonte = d_ATM_his ['fqfonte'] [..., ATM_his_keysort] 1161 ATM_precip = d_ATM_his ['precip'] [..., ATM_his_keysort] 1162 ATM_snowf = d_ATM_his ['snow'] [..., ATM_his_keysort] 1163 ATM_evap = d_ATM_his ['evap'] [..., ATM_his_keysort] 1164 ATM_wevap_ter = d_ATM_his ['wevap_ter'][..., ATM_his_keysort] 1165 ATM_wevap_oce = d_ATM_his ['wevap_oce'][..., ATM_his_keysort] 1166 ATM_wevap_lic = d_ATM_his ['wevap_lic'][..., ATM_his_keysort] 1167 ATM_wevap_sic = d_ATM_his ['wevap_sic'][..., ATM_his_keysort] 1168 ATM_runofflic = d_ATM_his ['runofflic'][..., ATM_his_keysort] 1169 1170 ATM_wevap_ter = d_ATM_his ['wevap_ter'][..., ATM_his_keysort] 1171 ATM_wevap_oce = d_ATM_his ['wevap_oce'][..., ATM_his_keysort] 1172 ATM_wevap_lic = d_ATM_his ['wevap_lic'][..., ATM_his_keysort] 1173 ATM_wevap_sic = d_ATM_his ['wevap_sic'][..., ATM_his_keysort] 1174 1175 ATM_wrain_ter = d_ATM_his ['wrain_ter'][..., ATM_his_keysort] 1176 ATM_wrain_oce = d_ATM_his ['wrain_oce'][..., ATM_his_keysort] 1177 ATM_wrain_lic = d_ATM_his ['wrain_lic'][..., ATM_his_keysort] 1178 ATM_wrain_sic = d_ATM_his ['wrain_sic'][..., ATM_his_keysort] 1179 1180 ATM_wsnow_ter = d_ATM_his ['wsnow_ter'][..., ATM_his_keysort] 1181 ATM_wsnow_oce = d_ATM_his ['wsnow_oce'][..., ATM_his_keysort] 1182 ATM_wsnow_lic = d_ATM_his ['wsnow_lic'][..., ATM_his_keysort] 1183 ATM_wsnow_sic = d_ATM_his ['wsnow_sic'][..., ATM_his_keysort] 1184 1185 print ( 'Step {Step}', end='' ) ; Step += 1 1186 1253 echo (' ico case') 1254 ATM_wbilo_oce = rprec (d_ATM_his ['wbilo_oce'])[..., ATM_his_keysort] 1255 ATM_wbilo_sic = rprec (d_ATM_his ['wbilo_sic'])[..., ATM_his_keysort] 1256 ATM_wbilo_ter = rprec (d_ATM_his ['wbilo_ter'])[..., ATM_his_keysort] 1257 ATM_wbilo_lic = rprec (d_ATM_his ['wbilo_lic'])[..., ATM_his_keysort] 1258 ATM_runofflic = rprec (d_ATM_his ['runofflic'])[..., ATM_his_keysort] 1259 ATM_fqcalving = rprec (d_ATM_his ['fqcalving'])[..., ATM_his_keysort] 1260 ATM_fqfonte = rprec (d_ATM_his ['fqfonte'] )[..., ATM_his_keysort] 1261 ATM_precip = rprec (d_ATM_his ['precip'] )[..., ATM_his_keysort] 1262 ATM_snowf = rprec (d_ATM_his ['snow'] )[..., ATM_his_keysort] 1263 ATM_evap = rprec (d_ATM_his ['evap'] )[..., ATM_his_keysort] 1264 ATM_wevap_ter = rprec (d_ATM_his ['wevap_ter'])[..., ATM_his_keysort] 1265 ATM_wevap_oce = rprec (d_ATM_his ['wevap_oce'])[..., ATM_his_keysort] 1266 ATM_wevap_lic = rprec (d_ATM_his ['wevap_lic'])[..., ATM_his_keysort] 1267 ATM_wevap_sic = rprec (d_ATM_his ['wevap_sic'])[..., ATM_his_keysort] 1268 ATM_runofflic = rprec (d_ATM_his ['runofflic'])[..., ATM_his_keysort] 1269 ATM_wevap_ter = rprec (d_ATM_his ['wevap_ter'])[..., ATM_his_keysort] 1270 ATM_wevap_oce = rprec (d_ATM_his ['wevap_oce'])[..., ATM_his_keysort] 1271 ATM_wevap_lic = rprec (d_ATM_his ['wevap_lic'])[..., ATM_his_keysort] 1272 ATM_wevap_sic = rprec (d_ATM_his ['wevap_sic'])[..., ATM_his_keysort] 1273 ATM_wrain_ter = rprec (d_ATM_his ['wrain_ter'])[..., ATM_his_keysort] 1274 ATM_wrain_oce = rprec (d_ATM_his ['wrain_oce'])[..., ATM_his_keysort] 1275 ATM_wrain_lic = rprec (d_ATM_his ['wrain_lic'])[..., ATM_his_keysort] 1276 ATM_wrain_sic = rprec (d_ATM_his ['wrain_sic'])[..., ATM_his_keysort] 1277 ATM_wsnow_ter = rprec (d_ATM_his ['wsnow_ter'])[..., ATM_his_keysort] 1278 ATM_wsnow_oce = rprec (d_ATM_his ['wsnow_oce'])[..., ATM_his_keysort] 1279 ATM_wsnow_lic = rprec (d_ATM_his ['wsnow_lic'])[..., ATM_his_keysort] 1280 ATM_wsnow_sic = rprec (d_ATM_his ['wsnow_sic'])[..., ATM_his_keysort] 1281 echo ( f'End of ico case ') 1282 1283 echo ( 'ATM wprecip_oce' ) 1187 1284 ATM_wprecip_oce = ATM_wrain_oce + ATM_wsnow_oce 1188 1285 ATM_wprecip_ter = ATM_wrain_ter + ATM_wsnow_ter … … 1190 1287 ATM_wprecip_lic = ATM_wrain_lic + ATM_wsnow_lic 1191 1288 1192 ATM_wbilo = ATM_wbilo_oce + ATM_wbilo_sic + ATM_wbilo_ter + ATM_wbilo_lic 1193 ATM_emp = ATM_evap - ATM_precip 1289 ATM_wbilo = ATM_wbilo_oce + ATM_wbilo_sic + ATM_wbilo_ter + ATM_wbilo_lic 1290 ATM_wevap = ATM_wevap_oce + ATM_wevap_sic + ATM_wevap_ter + ATM_wevap_lic 1291 ATM_wprecip = ATM_wprecip_oce + ATM_wprecip_sic + ATM_wprecip_ter + ATM_wprecip_lic 1292 ATM_wsnow = ATM_wsnow_oce + ATM_wsnow_sic + ATM_wsnow_ter + ATM_wsnow_lic 1293 ATM_wrain = ATM_wrain_oce + ATM_wrain_sic + ATM_wrain_ter + ATM_wrain_lic 1294 ATM_wemp = ATM_wevap - ATM_wprecip 1295 ATM_emp = ATM_evap - ATM_precip 1296 1194 1297 ATM_wprecip_sea = ATM_wprecip_oce + ATM_wprecip_sic 1195 1298 ATM_wsnow_sea = ATM_wsnow_oce + ATM_wsnow_sic … … 1198 1301 ATM_wevap_sea = ATM_wevap_sic + ATM_wevap_oce 1199 1302 1200 #ATM_wemp_ter = ATM_wevap_ter - ATM_precip * ATM_fter 1201 #ATM_wemp_oce = ATM_wevap_oce - ATM_precip * ATM_foce 1202 #ATM_wemp_sic = ATM_wevap_sic - ATM_precip * ATM_fsic 1203 #ATM_wemp_lic = ATM_wevap_lic - ATM_precip * ATM_flic 1204 #ATM_wemp_sea = ATM_wevap_sic + ATM_wevap_oce - ATM_precip * ATM_fsea 1205 1206 ATM_wemp_ter = ATM_wevap_ter - ATM_wprecip_ter 1207 ATM_wemp_oce = ATM_wevap_oce - ATM_wprecip_oce 1208 ATM_wemp_sic = ATM_wevap_sic - ATM_wprecip_sic 1209 ATM_wemp_lic = ATM_wevap_lic - ATM_wprecip_lic 1210 ATM_wemp_sea = ATM_wevap_sic - ATM_wprecip_oce 1211 1212 print ( 'Step {Step}', end='' ) ; Step += 1 1213 if RUN_HIS == 'latlon' : 1214 RUN_coastalflow = lmdz.geo2point ( d_RUN_his ['coastalflow'], dim1D='cell_latlon' ) 1215 RUN_riverflow = lmdz.geo2point ( d_RUN_his ['riverflow'] , dim1D='cell_latlon' ) 1216 RUN_runoff = lmdz.geo2point ( d_RUN_his ['runoff'] , dim1D='cell_latlon' ) 1217 RUN_drainage = lmdz.geo2point ( d_RUN_his ['drainage'] , dim1D='cell_latlon' ) 1218 RUN_riversret = lmdz.geo2point ( d_RUN_his ['riversret'] , dim1D='cell_latlon' ) 1219 1220 RUN_coastalflow_cpl = lmdz.geo2point ( d_RUN_his ['coastalflow_cpl'], dim1D='cell_latlon' ) 1221 RUN_riverflow_cpl = lmdz.geo2point ( d_RUN_his ['riverflow_cpl'] , dim1D='cell_latlon' ) 1222 1223 print ( 'Step {Step}', end='' ) ; Step += 1 1303 ATM_wemp_ter = ATM_wevap_ter - ATM_wprecip_ter 1304 ATM_wemp_oce = ATM_wevap_oce - ATM_wprecip_oce 1305 ATM_wemp_sic = ATM_wevap_sic - ATM_wprecip_sic 1306 ATM_wemp_lic = ATM_wevap_lic - ATM_wprecip_lic 1307 ATM_wemp_sea = ATM_wevap_sic - ATM_wprecip_oce 1308 1309 if RUN_HIS == 'latlon' : 1310 echo ( f'RUN costalflow Grille LATLON' ) 1311 if TestInterp : 1312 echo ( f'RUN runoff TestInterp' ) 1313 RUN_runoff = lmdz.geo2point ( rprec (d_RUN_his ['runoff_contfrac_interp'] ) , dim1D='cell' ) 1314 RUN_drainage = lmdz.geo2point ( rprec (d_RUN_his ['drainage_contfrac_interp']) , dim1D='cell' ) 1315 else : 1316 echo ( f'RUN runoff' ) 1317 RUN_runoff = lmdz.geo2point ( rprec (d_RUN_his ['runoff'] ), dim1D='cell' ) 1318 RUN_drainage = lmdz.geo2point ( rprec (d_RUN_his ['drainage'] ), dim1D='cell' ) 1319 1320 RUN_coastalflow = lmdz.geo2point ( rprec (d_RUN_his ['coastalflow'] ), dim1D='cell' ) 1321 RUN_riverflow = lmdz.geo2point ( rprec (d_RUN_his ['riverflow'] ), dim1D='cell' ) 1322 RUN_riversret = lmdz.geo2point ( rprec (d_RUN_his ['riversret'] ), dim1D='cell' ) 1323 RUN_coastalflow_cpl = lmdz.geo2point ( rprec (d_RUN_his ['coastalflow_cpl']), dim1D='cell' ) 1324 RUN_riverflow_cpl = lmdz.geo2point ( rprec (d_RUN_his ['riverflow_cpl'] ), dim1D='cell' ) 1325 1224 1326 if RUN_HIS == 'ico' : 1225 RUN_coastalflow = d_RUN_his ['coastalflow'][..., RUN_his_keysort] 1226 RUN_riverflow = d_RUN_his ['riverflow'] [..., RUN_his_keysort] 1227 RUN_runoff = d_RUN_his ['runoff'] [..., RUN_his_keysort] 1228 RUN_drainage = d_RUN_his ['drainage'] [..., RUN_his_keysort] 1229 RUN_riversret = d_RUN_his ['riversret'] [..., RUN_his_keysort] 1230 1231 RUN_coastalflow_cpl = d_RUN_his ['coastalflow_cpl'][..., RUN_his_keysort] 1232 RUN_riverflow_cpl = d_RUN_his ['riverflow_cpl'] [..., RUN_his_keysort] 1233 1234 print ( 'Step {Step}', end='' ) ; Step += 1 1327 echo ( f'RUN costalflow Grille ICO' ) 1328 RUN_coastalflow = rprec (d_RUN_his ['coastalflow'])[..., RUN_his_keysort] 1329 RUN_riverflow = rprec (d_RUN_his ['riverflow'] )[..., RUN_his_keysort] 1330 RUN_runoff = rprec (d_RUN_his ['runoff'] )[..., RUN_his_keysort] 1331 RUN_drainage = rprec (d_RUN_his ['drainage'] )[..., RUN_his_keysort] 1332 RUN_riversret = rprec (d_RUN_his ['riversret'] )[..., RUN_his_keysort] 1333 1334 RUN_coastalflow_cpl = rprec (d_RUN_his ['coastalflow_cpl'])[..., RUN_his_keysort] 1335 RUN_riverflow_cpl = rprec (d_RUN_his ['riverflow_cpl'] )[..., RUN_his_keysort] 1336 1337 Step = 0 1338 1235 1339 if SRF_HIS == 'latlon' : 1236 SRF_rain = lmdz.geo2point ( d_SRF_his ['rain'] , dim1D='cell_latlon') 1237 SRF_evap = lmdz.geo2point ( d_SRF_his ['evap'] , dim1D='cell_latlon') 1238 SRF_snowf = lmdz.geo2point ( d_SRF_his ['snowf'] , dim1D='cell_latlon') 1239 SRF_subli = lmdz.geo2point ( d_SRF_his ['subli'] , dim1D='cell_latlon') 1240 SRF_transpir = lmdz.geo2point ( np.sum (d_SRF_his ['transpir'], axis=1), dim1D='cell_latlon' ) 1241 1242 print ( 'Step {Step}', end='' ) ; Step += 1 1340 if TestInterp : 1341 echo ( f'SRF rain TestInterp' ) 1342 SRF_rain = lmdz.geo2point ( rprec (d_SRF_his ['rain_contfrac_interp'] ), dim1D='cell') 1343 SRF_evap = lmdz.geo2point ( rprec (d_SRF_his ['evap_contfrac_interp'] ), dim1D='cell') 1344 SRF_snowf = lmdz.geo2point ( rprec (d_SRF_his ['snow_contfrac_interp'] ), dim1D='cell') 1345 SRF_subli = lmdz.geo2point ( rprec (d_SRF_his ['subli_contfrac_interp']), dim1D='cell') 1346 SRF_transpir = lmdz.geo2point ( rprec (d_SRF_his ['transpir_contfrac_interp']).sum(dim='veget'), dim1D='cell' ) 1347 SRF_rain.attrs = d_SRF_his ['rain_contfrac_interp'].attrs 1348 SRF_evap.attrs = d_SRF_his ['evap_contfrac_interp'].attrs 1349 SRF_snowf.attrs = d_SRF_his ['snow_contfrac_interp'].attrs 1350 SRF_subli.attrs = d_SRF_his ['subli_contfrac_interp'].attrs 1351 SRF_transpir.attrs = d_SRF_his ['transpir_contfrac_interp'].attrs 1352 else : 1353 echo ( f'SRF rain' ) 1354 SRF_rain = lmdz.geo2point ( rprec (d_SRF_his ['rain'] ) , dim1D='cell') 1355 SRF_evap = lmdz.geo2point ( rprec (d_SRF_his ['evap'] ) , dim1D='cell') 1356 SRF_snowf = lmdz.geo2point ( rprec (d_SRF_his ['snowf']) , dim1D='cell') 1357 SRF_subli = lmdz.geo2point ( rprec (d_SRF_his ['subli']) , dim1D='cell') 1358 SRF_transpir = lmdz.geo2point ( rprec (d_SRF_his ['transpir']).sum(dim='veget'), dim1D='cell' ) 1359 1243 1360 if SRF_HIS == 'ico' : 1244 SRF_rain = d_SRF_his ['rain'] [..., SRF_his_keysort] 1245 SRF_evap = d_SRF_his ['evap'] [..., SRF_his_keysort] 1246 SRF_snowf = d_SRF_his ['snowf'][..., SRF_his_keysort] 1247 SRF_subli = d_SRF_his ['subli'][..., SRF_his_keysort] 1248 SRF_transpir = np.sum (d_SRF_his ['transpir'], axis=1)[..., SRF_his_keysort] 1249 1250 print ( 'Step {Step}', end='' ) ; Step += 1 1361 echo ( f'SRF rain') 1362 SRF_rain = rprec (d_SRF_his ['rain'] )[..., SRF_his_keysort] 1363 SRF_evap = rprec (d_SRF_his ['evap'] )[..., SRF_his_keysort] 1364 SRF_snowf = rprec (d_SRF_his ['snowf'])[..., SRF_his_keysort] 1365 SRF_subli = rprec (d_SRF_his ['subli'])[..., SRF_his_keysort] 1366 SRF_transpir = rprec (d_SRF_his ['transpir']).sum(dim='veget')[..., SRF_his_keysort] 1367 1368 echo ( f'SRF emp' ) 1251 1369 SRF_transpir.attrs['units'] = d_SRF_his ['transpir'].attrs['units'] 1252 1370 SRF_emp = SRF_evap - SRF_rain - SRF_snowf ; SRF_emp.attrs['units'] = SRF_rain.attrs['units'] … … 1271 1389 mmd2SI (VarT) 1272 1390 1273 print ( 'Step {Step}', end='' ) ; Step += 1 1391 echo ( f'RUN input' ) 1274 1392 RUN_input = RUN_runoff + RUN_drainage 1275 1393 RUN_output = RUN_coastalflow + RUN_riverflow 1276 1394 1277 print ( 'Step {Step}', end='' ) ; Step += 1 1395 echo ( f'ATM flw_wbilo' ) 1278 1396 ATM_flx_wbilo = ATM_flux_int ( ATM_wbilo ) 1397 ATM_flx_wevap = ATM_flux_int ( ATM_wevap ) 1398 ATM_flx_wprecip = ATM_flux_int ( ATM_wprecip ) 1399 ATM_flx_wsnow = ATM_flux_int ( ATM_wsnow ) 1400 ATM_flx_wrain = ATM_flux_int ( ATM_wrain ) 1401 ATM_flx_wemp = ATM_flux_int ( ATM_wemp ) 1402 1279 1403 ATM_flx_wbilo_lic = ATM_flux_int ( ATM_wbilo_lic ) 1280 1404 ATM_flx_wbilo_oce = ATM_flux_int ( ATM_wbilo_oce ) … … 1285 1409 ATM_flx_fqfonte = ATM_flux_int ( ATM_fqfonte ) 1286 1410 1287 print ( 'Step {Step}', end='' ) ; Step += 1 1411 LIC_flx_calving = LIC_flux_int ( ATM_fqcalving ) 1412 LIC_flx_fqfonte = LIC_flux_int ( ATM_fqfonte ) 1413 1414 echo ( f'ATM flx precip' ) 1288 1415 ATM_flx_precip = ATM_flux_int ( ATM_precip ) 1289 1416 ATM_flx_snowf = ATM_flux_int ( ATM_snowf ) … … 1291 1418 ATM_flx_runlic = ATM_flux_int ( ATM_runofflic ) 1292 1419 1293 print ( 'Step {Step}', end='' ) ; Step += 1 1420 LIC_flx_precip = LIC_flux_int ( ATM_precip ) 1421 LIC_flx_snowf = LIC_flux_int ( ATM_snowf ) 1422 LIC_flx_evap = LIC_flux_int ( ATM_evap ) 1423 LIC_flx_runlic = LIC_flux_int ( ATM_runofflic ) 1424 1425 echo ( f'ATM flx_wrain_ter' ) 1294 1426 ATM_flx_wrain_ter = ATM_flux_int ( ATM_wrain_ter ) 1295 1427 ATM_flx_wrain_oce = ATM_flux_int ( ATM_wrain_oce ) … … 1303 1435 ATM_flx_wsnow_sic = ATM_flux_int ( ATM_wsnow_sic ) 1304 1436 ATM_flx_wsnow_sea = ATM_flux_int ( ATM_wsnow_sea ) 1305 print ( 'Step {Step}', end='' ) ; Step += 1 1306 ATM_flx_wrain_ter = ATM_flux_int ( ATM_wrain_ter ) 1307 ATM_flx_wrain_oce = ATM_flux_int ( ATM_wrain_oce ) 1308 ATM_flx_wrain_lic = ATM_flux_int ( ATM_wrain_lic ) 1309 ATM_flx_wrain_sic = ATM_flux_int ( ATM_wrain_sic ) 1310 ATM_flx_wrain_sea = ATM_flux_int ( ATM_wrain_sea ) 1437 1438 echo ( f'ATM flx_evap_ter' ) 1311 1439 ATM_flx_wevap_ter = ATM_flux_int ( ATM_wevap_ter ) 1312 1440 ATM_flx_wevap_oce = ATM_flux_int ( ATM_wevap_oce ) … … 1325 1453 ATM_flx_wemp_sea = ATM_flux_int ( ATM_wemp_sea ) 1326 1454 1327 ATM_flx_emp = ATM_flux_int ( ATM_emp )1328 1329 print ( 'Step {Step}', end='' ) ; Step += 1 1455 ATM_flx_emp = ATM_flux_int ( ATM_emp ) 1456 1457 echo ( f'RUN flx_coastal' ) 1330 1458 RUN_flx_coastal = ONE_flux_int ( RUN_coastalflow) 1459 echo ( f'RUN flx_river' ) 1331 1460 RUN_flx_river = ONE_flux_int ( RUN_riverflow ) 1461 echo ( f'RUN flx_coastal_cpl' ) 1332 1462 RUN_flx_coastal_cpl = ONE_flux_int ( RUN_coastalflow_cpl) 1463 echo ( f'RUN flx_river_cpl' ) 1333 1464 RUN_flx_river_cpl = ONE_flux_int ( RUN_riverflow_cpl ) 1465 echo ( f'RUN flx_drainage' ) 1334 1466 RUN_flx_drainage = SRF_flux_int ( RUN_drainage ) 1467 echo ( f'RUN flx_riversset' ) 1335 1468 RUN_flx_riversret = SRF_flux_int ( RUN_riversret ) 1469 echo ( f'RUN flx_runoff' ) 1336 1470 RUN_flx_runoff = SRF_flux_int ( RUN_runoff ) 1471 echo ( f'RUN flx_input' ) 1337 1472 RUN_flx_input = SRF_flux_int ( RUN_input ) 1473 echo ( f'RUN flx_output' ) 1338 1474 RUN_flx_output = ONE_flux_int ( RUN_output ) 1339 1475 1340 print ( 'Step {Step}', end='' ) ; Step += 1 1341 RUN_flx_bil = RUN_flx_input - RUN_flx_output 1342 RUN_flx_rivcoa = RUN_flx_coastal + RUN_flx_river 1343 1344 prtFlux ('wbilo_oce ', ATM_flx_wbilo_oce , 'f' ) 1345 prtFlux ('wbilo_sic ', ATM_flx_wbilo_sic , 'f' ) 1346 prtFlux ('wbilo_sic+oce ', ATM_flx_wbilo_sea , 'f' ) 1347 prtFlux ('wbilo_ter ', ATM_flx_wbilo_ter , 'f' ) 1348 prtFlux ('wbilo_lic ', ATM_flx_wbilo_lic , 'f' ) 1349 prtFlux ('Sum wbilo_* ', ATM_flx_wbilo , 'f', True) 1350 prtFlux ('E-P ', ATM_flx_emp , 'f', True) 1351 prtFlux ('calving ', ATM_flx_calving , 'f' ) 1352 prtFlux ('fqfonte ', ATM_flx_fqfonte , 'f' ) 1353 prtFlux ('precip ', ATM_flx_precip , 'f' ) 1354 prtFlux ('snowf ', ATM_flx_snowf , 'f' ) 1355 prtFlux ('evap ', ATM_flx_evap , 'f' ) 1356 prtFlux ('runoff lic ', ATM_flx_runlic , 'f' ) 1357 1358 prtFlux ('ATM_flx_wemp_lic ', ATM_flx_wemp_lic , 'f' ) 1359 prtFlux ('ATM_flx_wemp_oce ', ATM_flx_wemp_oce , 'f' ) 1360 prtFlux ('ATM_flx_wemp_sic ', ATM_flx_wemp_sic , 'f' ) 1361 prtFlux ('ATM_flx_wemp_ter ', ATM_flx_wemp_ter , 'f' ) 1362 1363 prtFlux ('ATM_flx_wprecip_lic ', ATM_flx_wprecip_lic , 'f' ) 1364 prtFlux ('ATM_flx_wprecip_oce ', ATM_flx_wprecip_oce , 'f' ) 1365 prtFlux ('ATM_flx_wprecip_sic ', ATM_flx_wprecip_sic , 'f' ) 1366 prtFlux ('ATM_flx_wprecip_ter ', ATM_flx_wprecip_ter , 'f' ) 1367 1368 prtFlux ('ATM_flx_wrain_lic ', ATM_flx_wrain_lic , 'f' ) 1369 prtFlux ('ATM_flx_wrain_oce ', ATM_flx_wrain_oce , 'f' ) 1370 prtFlux ('ATM_flx_wrain_sic ', ATM_flx_wrain_sic , 'f' ) 1371 prtFlux ('ATM_flx_wrain_ter ', ATM_flx_wrain_ter , 'f' ) 1372 1373 prtFlux ('ATM_flx_wsnow_lic ', ATM_flx_wsnow_lic , 'f' ) 1374 prtFlux ('ATM_flx_wsnow_oce ', ATM_flx_wsnow_oce , 'f' ) 1375 prtFlux ('ATM_flx_wsnow_sic ', ATM_flx_wsnow_sic , 'f' ) 1376 prtFlux ('ATM_flx_wsnow_ter ', ATM_flx_wsnow_ter , 'f' ) 1377 1378 prtFlux ('ATM_flx_wevap_lic ', ATM_flx_wevap_lic , 'f' ) 1379 prtFlux ('ATM_flx_wevap_oce ', ATM_flx_wevap_oce , 'f' ) 1380 prtFlux ('ATM_flx_wevap_sic ', ATM_flx_wevap_sic , 'f' ) 1381 prtFlux ('ATM_flx_wevap_ter ', ATM_flx_wevap_ter , 'f' ) 1382 1383 prtFlux ('ATM_flx_wevap_lic ', ATM_flx_wevap_lic , 'f' ) 1384 prtFlux ('ATM_flx_wevap_oce ', ATM_flx_wevap_oce , 'f' ) 1385 prtFlux ('ATM_flx_wevap_sic ', ATM_flx_wevap_sic , 'f' ) 1386 prtFlux ('ATM_flx_wevap_ter ', ATM_flx_wevap_ter , 'f' ) 1476 echo ( f'RUN flx_bil' ) ; Step += 1 1477 #RUN_flx_bil = RUN_flx_input - RUN_flx_output 1478 #RUN_flx_rivcoa = RUN_flx_coastal + RUN_flx_river 1479 1480 RUN_flx_bil = ONE_flux_int ( RUN_input - RUN_output) 1481 RUN_flx_rivcoa = ONE_flux_int ( RUN_coastalflow + RUN_riverflow) 1482 1483 prtFlux ('wbilo_oce ', ATM_flx_wbilo_oce , 'f' ) 1484 prtFlux ('wbilo_sic ', ATM_flx_wbilo_sic , 'f' ) 1485 prtFlux ('wbilo_sic+oce ', ATM_flx_wbilo_sea , 'f' ) 1486 prtFlux ('wbilo_ter ', ATM_flx_wbilo_ter , 'f' ) 1487 prtFlux ('wbilo_lic ', ATM_flx_wbilo_lic , 'f' ) 1488 prtFlux ('Sum wbilo_* ', ATM_flx_wbilo , 'f', True) 1489 prtFlux ('E-P ', ATM_flx_emp , 'f', True) 1490 prtFlux ('calving ', ATM_flx_calving , 'f' ) 1491 prtFlux ('fqfonte ', ATM_flx_fqfonte , 'f' ) 1492 prtFlux ('precip ', ATM_flx_precip , 'f' ) 1493 prtFlux ('snowf ', ATM_flx_snowf , 'f' ) 1494 prtFlux ('evap ', ATM_flx_evap , 'f' ) 1495 prtFlux ('runoff lic ', ATM_flx_runlic , 'f' ) 1496 1497 prtFlux ('ATM_flx_wevap* ', ATM_flx_wevap , 'f' ) 1498 prtFlux ('ATM_flx_wrain* ', ATM_flx_wrain , 'f' ) 1499 prtFlux ('ATM_flx_wsnow* ', ATM_flx_wsnow , 'f' ) 1500 prtFlux ('ATM_flx_wprecip* ', ATM_flx_wprecip , 'f' ) 1501 prtFlux ('ATM_flx_wemp* ', ATM_flx_wemp , 'f', True ) 1502 1503 prtFlux ('ERROR evap ', ATM_flx_wevap - ATM_flx_evap , 'e', True ) 1504 prtFlux ('ERROR precip ', ATM_flx_wprecip - ATM_flx_precip, 'e', True ) 1505 prtFlux ('ERROR snow ', ATM_flx_wsnow - ATM_flx_snowf , 'e', True ) 1506 prtFlux ('ERROR emp ', ATM_flx_wemp - ATM_flx_emp , 'e', True ) 1507 1387 1508 1388 1509 echo ( '\n====================================================================================' ) … … 1401 1522 1402 1523 ATM_flx_budget = -ATM_flx_wbilo + ATM_flx_calving + ATM_flx_runlic #+ ATM_flx_fqfonte + RUN_flx_river 1524 1525 1403 1526 echo ('') 1404 1527 #echo (' Global {:12.3e} kg | {:12.4f} Sv | {:12.4f} m '.format ( ATM_flx_budget , ATM_flx_budget / dtime_sec*1E-9, ATM_flx_budget /ATM_aire_sea_tot/ATM_rho )) … … 1427 1550 echo ( '\n====================================================================================' ) 1428 1551 1429 ATM_flx_runofflic_lic = ATM_flux_int ( ATM_runofflic * ATM_flic ) 1430 1431 LIC_flx_budget1 = -ATM_flx_wemp_lic - ATM_flx_calving - ATM_flx_fqfonte 1432 LIC_flx_budget2 = -ATM_flx_wbilo_lic - ATM_flx_calving - ATM_flx_fqfonte 1433 LIC_flx_budget3 = -ATM_flx_wbilo_lic - ATM_flx_runofflic_lic 1552 LIC_flx_budget1 = Sprec ( [-ATM_flx_wemp_lic , -LIC_flx_calving , -LIC_flx_fqfonte] ) 1553 LIC_flx_budget2 = Sprec ( [-ATM_flx_wbilo_lic , -LIC_flx_calving , -LIC_flx_fqfonte] ) 1554 LIC_flx_budget3 = Sprec ( [-ATM_flx_wbilo_lic , -LIC_flx_runlic] ) 1555 LIC_flx_budget4 = Sprec ( [-ATM_flx_wemp_lic , -LIC_flx_runlic] ) 1434 1556 1435 1557 echo ( f'-- LIC -- {Title} ' ) … … 1438 1560 echo ( f'Mass qs begin = {LIC_mas_qs_beg :12.6e} kg | Mass end = {LIC_mas_qs_end :12.6e} kg' ) 1439 1561 echo ( f'Mass runlic0 begin = {LIC_mas_runlic0_beg:12.6e} kg | Mass end = {LIC_mas_runlic0_end:12.6e} kg' ) 1440 prtFlux ( 'dmass (LIC sno) ', dLIC_mas_sno , 'f', True, width=65 ) 1441 prtFlux ( 'dmass (LIC qs) ', dLIC_mas_qs , 'e', True, width=65 ) 1442 prtFlux ( 'dmass (LIC wat) ', dLIC_mas_wat , 'f', True, width=65 ) 1443 prtFlux ( 'dmass (LIC runlic0) ', dLIC_mas_runlic0 , 'e', True, width=65 ) 1444 prtFlux ( 'dmass (LIC total) ', dLIC_mas_wat , 'e', True, width=65 ) 1445 prtFlux ( 'LIC ATM_flx_wemp_lic ', ATM_flx_wemp_lic , 'f', True, width=65 ) 1446 prtFlux ( 'LIC ATM_flx_fqfonte ', ATM_flx_fqfonte , 'f', True, width=65 ) 1447 prtFlux ( 'LIC ATM_flx_calving ', ATM_flx_calving , 'f', True, width=65 ) 1448 prtFlux ( 'LIC ATM_flx_runofflic ', ATM_flx_runofflic_lic , 'f', True, width=65 ) 1449 prtFlux ( 'LIC fqfonte + calving ', ATM_flx_calving+ATM_flx_fqfonte , 'f', True, width=65 ) 1450 prtFlux ( 'LIC fluxes 1 (wevap - precip*frac_lic - fqcalving - fqfonte) ', LIC_flx_budget1 , 'f', True, width=65 ) 1451 prtFlux ( 'LIC fluxes 2 (-wbilo_lic - fqcalving - fqfonte) ', LIC_flx_budget2 , 'f', True, width=65 ) 1452 prtFlux ( 'LIC fluxes 3 (-wbilo_lic - runofflic*frac_lic) ', LIC_flx_budget3 , 'f', True, width=65 ) 1453 prtFlux ( 'LIC error 1 ', LIC_flx_budget1-dLIC_mas_wat , 'e', True, width=65 ) 1454 prtFlux ( 'LIC error 2 ', LIC_flx_budget2-dLIC_mas_wat , 'e', True, width=65 ) 1455 prtFlux ( 'LIC error 3 ', LIC_flx_budget3-dLIC_mas_wat , 'e', True, width=65 ) 1562 prtFlux ( 'dmass (LIC sno) ', dLIC_mas_sno , 'f', True, width=45 ) 1563 prtFlux ( 'dmass (LIC qs) ', dLIC_mas_qs , 'e', True, width=45 ) 1564 prtFlux ( 'dmass (LIC wat) ', dLIC_mas_wat , 'f', True, width=45 ) 1565 prtFlux ( 'dmass (LIC runlic0) ', dLIC_mas_runlic0 , 'e', True, width=45 ) 1566 prtFlux ( 'dmass (LIC total) ', dLIC_mas_wat , 'e', True, width=45 ) 1567 prtFlux ( 'LIC ATM_flx_wemp_lic ', ATM_flx_wemp_lic , 'f', True, width=45 ) 1568 prtFlux ( 'LIC LIC_flx_fqfonte ', LIC_flx_fqfonte , 'f', True, width=45 ) 1569 prtFlux ( 'LIC LIC_flx_calving ', LIC_flx_calving , 'f', True, width=45 ) 1570 prtFlux ( 'LIC LIC_flx_runofflic ', LIC_flx_runlic , 'f', True, width=45 ) 1571 prtFlux ( 'LIC fqfonte + calving ', LIC_flx_calving+LIC_flx_fqfonte , 'f', True, width=45 ) 1572 prtFlux ( 'LIC fluxes 1 ( wemp_lic - fqcalving - fqfonte)) ', LIC_flx_budget1 , 'f', True, width=45 ) 1573 prtFlux ( 'LIC fluxes 2 (-wbilo_lic - fqcalving - fqfonte) ', LIC_flx_budget2 , 'f', True, width=45 ) 1574 prtFlux ( 'LIC fluxes 3 (-wbilo_lic - runofflic*frac_lic) ', LIC_flx_budget3 , 'f', True, width=45 ) 1575 prtFlux ( 'LIC fluxes 3 ( wemp_lic - runofflic*frac_lic) ', LIC_flx_budget4 , 'f', True, width=45 ) 1576 prtFlux ( 'LIC error 1 ', LIC_flx_budget1-dLIC_mas_wat , 'e', True, width=45 ) 1577 prtFlux ( 'LIC error 2 ', LIC_flx_budget2-dLIC_mas_wat , 'e', True, width=45 ) 1578 prtFlux ( 'LIC error 3 ', LIC_flx_budget3-dLIC_mas_wat , 'e', True, width=45 ) 1456 1579 echo ( 'LIC error (wevap - precip*frac_lic - fqcalving - fqfonte) = {:12.4e} (rel) '.format ( (LIC_flx_budget1-dLIC_mas_wat)/dLIC_mas_wat) ) 1457 1580 echo ( 'LIC error (-wbilo_lic - fqcalving - fqfonte) = {:12.4e} (rel) '.format ( (LIC_flx_budget2-dLIC_mas_wat)/dLIC_mas_wat) ) … … 1468 1591 SRF_flx_emp = SRF_flux_int ( SRF_emp ) 1469 1592 1470 RUN_flx_torouting = RUN_flx_runoff + RUN_flx_drainage1471 RUN_flx_fromrouting = RUN_flx_coastal + RUN_flx_river1472 1473 SRF_flx_all = SRF_flx_rain + SRF_flx_snowf - SRF_flx_evap - RUN_flx_runoff - RUN_flx_drainage1593 RUN_flx_torouting = SRF_flux_int ( RUN_runoff + RUN_drainage) 1594 RUN_flx_fromrouting = ONE_flux_int ( RUN_coastalflow + RUN_riverflow ) 1595 1596 SRF_flx_all = SRF_flux_int ( SRF_rain + SRF_snowf - SRF_evap - RUN_runoff - RUN_drainage ) 1474 1597 1475 1598 prtFlux ('rain ', SRF_flx_rain , 'f' )
Note: See TracChangeset
for help on using the changeset viewer.