File:Forest cover 240ma 1.png

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search

Forest_cover_240ma_1.png(752 × 496 pixels, file size: 187 KB, MIME type: image/png)

Captions

Captions

Forest cover 240 Ma

Summary

[edit]
Description
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

https://www.earthbyte.org/webdav/ftp/Data_Collections/Scotese_Wright_2018_PaleoDEM/Scotese_Wright_2018_Maps_1-88_1degX1deg_PaleoDEMS_nc.zip

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

https://zenodo.org/record/5460860/files/Scotese_Wright_2018_Maps_1-88_6minX6min_PaleoDEMS_nc.zip?download=1

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


    1. calculate bioclimatic variables bio1 ... bio19 from
    2. pr, tmin, tmax files in "R"
  1. 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)

  1. plot(bios1)

str(bios1)


bio12<-bios112

plot(bio12)


for (i in 1:length(bios1)) { writeRaster(bios1i, names(bios1i), format='CDF') }



Licensing

[edit]
I, the copyright holder of this work, hereby publish it under the following license:
w:en:Creative Commons
attribution share alike
This file is licensed under the Creative Commons Attribution-Share Alike 4.0 International license.
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/TimeThumbnailDimensionsUserComment
current15:19, 19 June 2022Thumbnail for version as of 15:19, 19 June 2022752 × 496 (187 KB)Merikanto (talk | contribs)Uploaded own work with UploadWizard

There are no pages that use this file.