File:Forest cover 240ma 1.png
Forest_cover_240ma_1.png (752 × 496 pixels, file size: 187 KB, MIME type: image/png)
Captions
Summary
[edit]DescriptionForest cover 240ma 1.png |
English: Forest cover 240 million years ago. It was Middle Triassic period. |
Date | |
Source | Own work |
Author | Merikanto |
This image is based data from exoplasim simulation and Scotese paleodem maps.
https://www.earthbyte.org/paleodem-resource-scotese-and-wright-2018/
PaleoDEM Resource – Scotese and Wright (2018) 11 August, 2018 by Sabin Zahirovic
PALEOMAP Paleodigital Elevation Models (PaleoDEMS) for the Phanerozoic
Scotese, Christopher R, & Wright, Nicky M. (2018). PALEOMAP Paleodigital Elevation Models (PaleoDEMS) for the Phanerozoic [Data set]. Zenodo. https://doi.org/10.5281/zenodo.5460860
Scotese, Christopher R; Wright, Nicky M https://zenodo.org/record/5460860
Params from exoplasim
triassic middle
a_eccentricity1=0.0167022 a_obliquity1=23.441 a_lonvernaleq1=102.7
a_pCO21=1400.0e-6
Codes to produce pre-data for this
https://commons.wikimedia.org/wiki/File:World_200ma_6.webp
Code for "dipping" data for exoplasim output
python dipper1.py -i ./holocene/holocene.nc -o ./origo_holocene/vegeta.nc -v vegf -m mean -p 0 -q 100 -s 1 -f 1
"dipper1.py"
Extra
Bioclimatic variables:
You must first dip "mint, maxt, pr" to "tmin, tmax, pr" with "dipper" data extractor utility
python dipper1.py -i ./indata/input.nc -o ./origo/ -x 1
Exoplasim output data extractor "dipper1.py"
######
#
## exoplasim output netcdf data extractor to netcdf file "dipper"
## save variable too netcdf file
## tex tas to file
#
## 27.6.2023 v 0000.0010.0000
## NOTE alpha only
#
#################
import getopt
import netCDF4 as nc
import numpy as np
from scipy import interpolate
from scipy.interpolate import griddata
import matplotlib.pyplot as plt
from matplotlib.pylab import *
import matplotlib.mlab as mlab
##devetype 1 basal T21
## savetype==1test: while global area T21
savetype1=1
def ncread(fn1, var1):
ds2 = nc.Dataset(fn1)
varr1=ds2[var1]
return(varr1)
def savenetcdf_single_allworld(outfilename1, outvarname1, xoutvalue1):
outshape1=np.shape(xoutvalue1)
nlat1=outshape1[0]
nlon1=outshape1[1]
X = np.arange(-180, 180, 360/(nlon1-1))
Y = np.arange(-90, 90, 180/(nlat1-1))
X=np.append(X, 180)
Y=np.append(Y, 90)
print(len(X), len(Y))
print(" Saving nc file : ", outfilename1)
ncout1 = nc.Dataset(outfilename1, 'w', format='NETCDF4')
outlat1 = ncout1.createDimension('lat', nlat1)
outlon1 = ncout1.createDimension('lon', nlon1)
outlats1 = ncout1.createVariable('lat', 'f4', ('lat',))
outlons1 = ncout1.createVariable('lon', 'f4', ('lon',))
outvalue1 = ncout1.createVariable(outvarname1, 'f4', ('lat', 'lon',))
outlats1.units = 'Degrees North'
outlons1.units = 'Degrees East'
outvalue1.units = 'Unknown'
outlats1[:] = Y
outlons1[:] = X
outvalue1[:, :] =xoutvalue1[:]
ncout1.close()
return 0
def savenetcdf_single_frommem(outfilename1, outvarname1, xoutvalue1,xoutlats1,xoutlons1):
nlat1=len(xoutlats1)
nlon1=len(xoutlons1)
#indata_set1=indata1
print(outfilename1)
ncout1 = nc.Dataset(outfilename1, 'w', format='NETCDF4')
outlat1 = ncout1.createDimension('lat', nlat1)
outlon1 = ncout1.createDimension('lon', nlon1)
outlats1 = ncout1.createVariable('lat', 'f4', ('lat',))
outlons1 = ncout1.createVariable('lon', 'f4', ('lon',))
outvalue1 = ncout1.createVariable(outvarname1, 'f4', ('lat', 'lon',))
outvalue1.units = 'Unknown'
outlats1[:] = xoutlats1
outlons1[:] = xoutlons1
outvalue1[:, :] =xoutvalue1[:]
ncout1.close()
return 0
def ncsave_T21(oname1, ovar1, ovals1):
newx=64
newy=32
X = np.arange(-180, 180, 360/newx)
Y = np.arange(-90, 90, 180/newy)
savenetcdf_single_frommem(oname1, ovar1,ovals1,Y, X)
########################################################
#############################
def dip_data_from_netcdf(infilename1, outfilename1, varname1, outsel,ofset1, koef1, flipud1, show1):
outseli=-11
if(outsel=="mean"):
outseli=-11
if(outsel=="min"):
outseli=-22
if(outsel=="max"):
outseli=-33
if(outsel=="sum"):
outseli=-44
print("Sel code", outsel, outseli)
varr0=ncread(infilename1, varname1)
varr1=varr0
#print(varr1)
means1=[]
for month in range(1,12):
varmonth1=varr1[month]
mean1=np.mean(varmonth1)
means1.append(mean1)
varmean1=np.mean(varr1,axis=0)*koef1+ofset1
varsum1=np.sum(varr1,axis=0)*koef1+ofset1
mini0=np.min(means1)
maxi0=np.max(means1)
mean0=np.mean(means1)
mini1=mini0*koef1+ofset1
maxi1=maxi0*koef1+ofset1
mean1=mean0*koef1+ofset1
maxi1=maxi0*koef1+ofset1
minlok1=means1.index(mini0)
maxlok1=means1.index(maxi0)
print("mean, min, max")
print(mean1, mini1,maxi1)
print("minmonth, maxmonth")
print(minlok1, maxlok1)
minitable1=varr1[minlok1]*koef1+ofset1
maxitable1=varr1[maxlok1]*koef1+ofset1
#plt.imshow(maxitable1)
#plt.show()
#quit(-1)
sema1=0
if(outseli==0):
varout1=varmean1
sema1=1
if(outseli==-11):
varout1=varmean1
sema1=1
if(outseli==-22):
varout1=minitable1
sema1=1
if(outseli==-33):
print("Max")
varout1=maxitable1
sema1=1
if(outseli==-44):
print("Sum")
varout1=varsum1
sema1=1
if(sema1==0):
outseli=int(outsel)
if(outseli>0):
if(outseli<13):
print("Month ", outseli)
varout1=varr1[outseli]
varout2=np.asarray(varout1).astype(float)
if(flipud1==1):
print("Flipud output.")
varout2=np.flipud(varout2)
else:
print("No out flipud")
global savetype1
if(savetype1==0):
ncsave_T21(outfilename1, varname1,varout2)
else:
print(" Not T21")
savenetcdf_single_allworld(outfilename1, varname1, varout1)
if(show1==1):
plt.imshow(np.flipud(varout2))
plt.show()
return(0)
def helptext():
print("Exoplasim output data extractor")
print('dipper1.py -i <inputfile> -o <outputfile> -v <var> -m <month> -p <offset> -q <coeff> -show <[1:0]> -f <[1:0]> -x <1:0>')
print( "\n tex. capture Kelvin temperature to Celsius: \n\n python dipper1.py -i ./origo/input.nc -o tas.nc -v tas -m mean -p -273.15 -q 1.0 -s 1 -f 1")
print( "\n tex. capture annual precipitation to mm : \n\n python dipper1.py -i ./holocene/holox1_21.nc -o ./origo_holocene/pr.nc -v pr -m sum -p 0 -q 2592000000 -s 1 -f 1")
print( "\n ---> conversion ms-1 to mm/year. Note sum calculates all months to together, so you need approx coefficient like 24h*3600s*1000mm*30d")
print( "\n month can be 1 ...12 or string min, max, mean or sum")
print( "\n Extract monthly tas, pr data: \n\n python dipper2.py -i ./indata/input.nc -o ./origo/ -x 1")
print( "\n Output units: pr in mm, tas in deg C")
return(0)
def monthly_data_from_netcdf(infilename1, outdir1):
tas1=ncread(infilename1, "tas")
pr1=ncread(infilename1, "pr")
mint1=ncread(infilename1, "mint")
maxt1=ncread(infilename1, "maxt")
rh1=ncread(infilename1, "hur")
rad1=ncread(infilename1, "nbr")
ua1=ncread(infilename1, "ua")
va1=ncread(infilename1, "va")
ps1=ncread(infilename1, "ps")
cloud1=ncread(infilename1, "clt")
alb1=ncread(infilename1, "alb")
wind1=ncread(infilename1, "spd")
evap1=ncread(infilename1, "evap")
print(shape(rh1))
shap1=shape(ua1)
layer1=shap1[1]-1
print(layer1)
#quit(-1)
tass1=[]
prs1=[]
mints1=[]
maxts1=[]
rhs1=[]
rads1=[]
uas1=[]
vas1=[]
pss1=[]
clouds1=[]
albs1=[]
winds1=[]
evaps1=[]
profset1=0
tasofset1=-273.15
tascoef1=1
prcoef1=60*60*24*30.5*1000
for month in range(0,12):
tasmonth1=tas1[month]
prmonth1=pr1[month]
mintmonth1=mint1[month]
maxtmonth1=maxt1[month]
rhmonth1=rh1[month][layer1]
radmonth1=rad1[month]
psmonth1=ps1[month]
cloudmonth1=cloud1[month]
albmonth1=alb1[month]
windmonth1=wind1[month][layer1]
evapmonth1=evap1[month]
uamonth1=ua1[month][layer1]
vamonth1=va1[month][layer1]
tass1.append(tasmonth1)
prs1.append(prmonth1)
mints1.append(mintmonth1)
maxts1.append(maxtmonth1)
rhs1.append(rhmonth1)
rads1.append(radmonth1)
uas1.append(uamonth1)
vas1.append(vamonth1)
pss1.append(psmonth1)
clouds1.append(cloudmonth1)
albs1.append(albmonth1)
winds1.append(windmonth1)
evaps1.append(evapmonth1)
tasmean0=np.array(tass1)
prmean0=np.array(prs1)
mint0=np.array(mints1)
maxt0=np.array(maxts1)
rh0=np.array(rhs1)
rad0=np.array(rads1)
ua0=np.array(uas1)
va0=np.array(vas1)
ps0=np.array(pss1)
cloud0=np.array(clouds1)
alb0=np.array(albs1)
wind0=np.array(windmonth1)
evap0=np.array(evaps1)
tasmean=tasmean0+tasofset1
mint=mint0+tasofset1
maxt=maxt0+tasofset1
prmean=prmean0*prcoef1
rh=rh0*1.0
rad=rad0*1.0
va=va0*1.0
ua=ua0*1.0
ps=ps0*1.0
alb=alb0*1.0
cloudarea=cloud0*1.0
evap=evap0*prcoef1
wind=wind0*1.0
#print (shape(tasmean))
#plt.imshow(tasmean[6])
#plt.show()
for month in range(1,13):
n=month-1
padnum1=f'{month:02}'
#print(padnum1)
meantempname=outdir1+"tmean_"+padnum1+".nc"
meanprname=outdir1+"pr_"+padnum1+".nc"
mintempname=outdir1+"tmin_"+padnum1+".nc"
maxtempname=outdir1+"tmax_"+padnum1+".nc"
rhname=outdir1+"rh_"+padnum1+".nc"
radname=outdir1+"rad_"+padnum1+".nc"
uaname=outdir1+"ua "+padnum1+".nc"
vaname=outdir1+"va "+padnum1+".nc"
psname=outdir1+"ps "+padnum1+".nc"
cloudname=outdir1+"cloudarea "+padnum1+".nc"
albname=outdir1+"alb "+padnum1+".nc"
windname=outdir1+"wind "+padnum1+".nc"
evapname=outdir1+"evap "+padnum1+".nc"
#print(meantempname, meanprname)
ncsave_T21(meantempname, "tmean", tasmean[n])
ncsave_T21(mintempname, "tmin", mint[n])
ncsave_T21(maxtempname, "tmax", maxt[n])
ncsave_T21(meanprname, "pr", prmean[n])
ncsave_T21(maxtempname, "tmax", maxt[n])
ncsave_T21(rhname, "rh", rh[n])
ncsave_T21(radname, "rad", rad[n])
ncsave_T21(uaname, "ua", ua[n])
ncsave_T21(vaname, "va", va[n])
ncsave_T21(psname, "ps", ps[n])
ncsave_T21(cloudname, "cloudarea", cloudarea[n])
ncsave_T21(albname, "alb", alb[n])
ncsave_T21(windname, "wind", wind[n])
ncsave_T21(evapname, "evap", evap[n])
print("Climate data saved.")
return(0)
def main(argv):
infilename1="./indata/input.nc"
varname1="tas"
outfilename1="./origo/tas.nc"
outsel="mean"
outseli=-99
koef1=1
ofset1=-273.15
show1=1
flipud1=0
ofset0="0"
koef0="1"
show0="0"
flipud0="0"
monthly0="0"
monthly1=0
if(len(argv)==0):
helptext()
sys.exit(2)
try:
opts, args = getopt.getopt(argv,"h:i:o:m:v:p:q:f:s:x:",["help=","ifile=","ofile=","month=","var=","offset=","coeff=", "flipud=", "show=","monthly="])
except getopt.GetoptError:
helptext()
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
helptext()
sys.exit()
elif opt in ("-i", "--ifile"):
infilename1 = arg
elif opt in ("-o", "--ofile"):
outfilename1 = arg
elif opt in ("-m", "--month"):
outsel = arg
elif opt in ("-v", "--var"):
varname1 = arg
elif opt in ("-p", "--offset"):
ofset0 = arg
elif opt in ("-q", "--coeff"):
koef0 = arg
elif opt in ("-s", "--show"):
show0 = arg
elif opt in ("-f", "--flipud"):
flipud0 = arg
elif opt in ("-x", "--monthly"):
monthly0 = "1"
print ('Input exoplasim netcdf file :', infilename1)
print ('Output netcdf is ', outfilename1)
print ('Selected variable ', varname1)
print ('Selected month ', outsel)
print ('Z Offset ', ofset0)
print ('Z Coefficient ', koef0)
print ('Flip upside down output ', flipud0)
print ('Show ', show0)
print ('Monthly ', monthly0)
print ('----')
ofset1=float(ofset0)
koef1=float(koef0)
ofset1=float(ofset0)
koef1=float(koef0)
flipud1=int(flipud0)
monthly1=int(monthly0)
#f1=flipud0[0]
#print(f1)
#quit(-1)
#print("FLIP>",flipud0,"<")
#print("SHOW>",show0,"<")
show1=int(show0)
#print(show1)
#quit(-1)
if(monthly1==1):
print("Extract monthly tas, pr data ...")
monthly_data_from_netcdf(infilename1, outfilename1)
if(monthly1==0):
dip_data_from_netcdf(infilename1, outfilename1, varname1, outsel,ofset1, koef1,flipud1, show1)
return(0)
if __name__ == "__main__":
main(sys.argv[1:])
Calculate bio1---bio19 variables in R with dismo
-
- calculate bioclimatic variables bio1 ... bio19 from
- pr, tmin, tmax files in "R"
- 2.7.2022 v 0000.0000
library(raster)
library(ncdf4)
library(dismo)
workdir1="/home/rakastaja/bioclim1/origo/"
setwd(workdir1)
f1 = list.files(pattern = "pr")
f2 = list.files(pattern = "tmin")
f3 = list.files(pattern = "tmax")
prec <- stack(f1)
tmin <- stack(f2)
tmax <- stack(f3)
bios1<-biovars(prec=prec,tmin=tmin,tmax=tmax)
- plot(bios1)
str(bios1)
bio12<-bios112
plot(bio12)
for (i in 1:length(bios1)) {
writeRaster(bios1i, names(bios1i), format='CDF')
}
Licensing
[edit]- You are free:
- to share – to copy, distribute and transmit the work
- to remix – to adapt the work
- Under the following conditions:
- attribution – You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
- share alike – If you remix, transform, or build upon the material, you must distribute your contributions under the same or compatible license as the original.
File history
Click on a date/time to view the file as it appeared at that time.
Date/Time | Thumbnail | Dimensions | User | Comment | |
---|---|---|---|---|---|
current | 15:19, 19 June 2022 | 752 × 496 (187 KB) | Merikanto (talk | contribs) | Uploaded own work with UploadWizard |
You cannot overwrite this file.
File usage on Commons
There are no pages that use this file.